3

FOSUserBundle 配置文件控制器

 use Symfony\Component\DependencyInjection\ContainerAware;
 class ProfileController extends ContainerAware

一些功能还可以......但是当我尝试然后创建表单时

$form = $this->createForm

出现这个错误:调用未定义的方法 ProfileController::createForm()

但是当我把它改成这样时:

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class ProfileController extends Controller

表单已呈现...所以...我不知道如何将此控制器添加到我的班级并且不删除 ContainerAware ?:/

//

我的解决方案?

而不是我使用的容器感知

use Symfony\Component\DependencyInjection\ContainerAwareInterface;

进而

class ProfileController extends Controller implements ContainerAwareInterface

但我不知道我看不到不同的我现在是菜鸟所以......这是一个好的解决方案还是我会破坏一些东西?

4

3 回答 3

6

要回答您的原始问题,

代替:

$form = $this->createForm

和:

$form = $this->container->get('form.factory')->create($type, $data, $options);

createForm 方法只是定义在 Symfony\Bundle\FrameworkBundle\Controller\Controller 中的一个便利方法。由于各种原因,第 3 方库倾向于不扩展 Controller 类。因此 createForm 不可用。

真正的问题是:您为什么要尝试扩展 Profile 控制器?在大多数情况下,它是不必要的。最好通过监听事件来进行自定义。这当然假设您使用的是 FOSUserBundle 的开发版本。

于 2013-03-14T14:13:20.330 回答
2

控制器已经ContainerAware- 从控制器声明:

class Controller extends ContainerAware
于 2013-03-14T11:12:08.637 回答
2

看看这个博客Symfony2: Richard Miller的远离基础控制器

于 2013-07-02T11:50:10.313 回答