2013-03-14 4 views
1

FOSUserBundle профиль контроллерcontainerAware и контроллер в Symfony2

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

некоторые функции нормально ... но когда я пытаюсь то CREAT форму

$form = $this->createForm 

Эта ошибка появляется: Вызов неопределенной метод ProfileController :: CreateForm()

НО когда я изменить его к этому:

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

Форма визуализируется ... так ... я не знаю, как я могу добавить этот контроллер в свой класс и не удалить ContainerAware? :/

//

МОЕ решение?

вместо containeraware я использую

use Symfony\Component\DependencyInjection\ContainerAwareInterface; 

А потом

class ProfileController extends Controller implements ContainerAwareInterface 

Но я не знаю, я не могу видеть другого я нуб теперь так ... это хорошее решение, или я буду разорен что нибудь?

ответ

1

контроллер уже ContainerAware - от контроллера декларации:

class Controller extends ContainerAware 
+0

то почему эта ошибка? Вызов неопределенного метода ProfileController :: createForm() – EnchanterIO

+0

Вы получаете ошибку с расшифровкой 'class ProfileController extends Controller'? –

+0

нет, я получил ваше предложение неправильно ... вы имели в виду, когда я расширяю контроллер, я не должен внедрять контейнер? – EnchanterIO

5

Чтобы ответить на исходный вопрос,

Заменить:

$form = $this->createForm 

С:

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

Метод createForm - это просто метод удобства, определенный в Symfony \ Bundle \ FrameworkBundle \ Controller \ Controller. По разным причинам сторонние библиотеки, как правило, не расширяют класс Controller. Следовательно, createForm недоступен.

Реальный вопрос: почему вы пытаетесь расширить контроллер профиля? В большинстве случаев это необязательно. Лучше делать свою настройку, слушая события. Конечно, предполагается, что вы используете версию разработки FOSUserBundle.

1

Посмотрите на этот блог Symfony2: Moving Away From the Base Controller Ричарда Миллера

+0

Обратите внимание, что ссылки только для ответов не приветствуются, SO-ответы должны быть конечной точкой поиска решения (по сравнению с еще одной остановкой ссылок, которые со временем устаревают). Пожалуйста, подумайте о добавлении отдельного резюме здесь, сохранив ссылку в качестве ссылки. – kleopatra

Смежные вопросы