symfony2中的containerAware和Controller

时间:2013-03-14 11:08:38

标签: symfony controller containers extends

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

但是我不知道我现在不能看到不同的我是noob ...这是好的解决方案还是我会破坏某些东西?

3 个答案:

答案 0 :(得分:6)

回答原来的问题,

替换:

$form = $this->createForm

使用:

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

createForm方法只是Symfony \ Bundle \ FrameworkBundle \ Controller \ Controller中定义的便捷方法。由于各种原因,第三方库往往不扩展Controller类。因此createForm不可用。

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

答案 1 :(得分:2)

请查看Richard Miller撰写的此博客Symfony2: Moving Away From the Base Controller

答案 2 :(得分:1)

控制器已经是ContainerAware - 来自Controller声明:

class Controller extends ContainerAware