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 ...这是好的解决方案还是我会破坏某些东西?
答案 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