2012-08-08 4 views
-1

У меня проблемы с Symfony2. А именно, как использовать функцию __construct(). Официальная документация ужасно плоха!symfony2 - как управляющий контроллер __construct

Я хочу, чтобы иметь возможность использовать следующее:

public function __construct() 
{ 
    parent::__construct(); 
    $user = $this->get('security.context')->getToken()->getUser(); 
} 

Как всегда я получаю следующее сообщение об ошибке:

Fatal error: Cannot call constructor in /Sites/src/DEMO/DemoBundle/Controller/Frontend/HomeController.php on line 11 

Line 11 является parent::__construct();. Я удалил его и получил следующее, новая ошибка

Fatal error: Call to a member function get() on a non-object in /Sites/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php on line 242 

Я думаю, что я, возможно, потребуется настроить ContainerInterface DIC, но я понятия не имею, как это сделать (я попробовал и потерпел неудачу, несчастно)

Любые идеи?

+0

Лучше использовать 4 пробела для выделения кода вместо использования '>'. – j0k

ответ

4

Это на самом деле довольно распространенное заблуждение, для новых разработчиков S2. Как говорит @KingCrunch, контроллер S2 не имеет конструкции и, следовательно, ваш подход не удастся. Взгляните на исходный код: пространство имен Symfony \ Bundle \ FrameworkBundle \ Controller \ Controller, и вы увидите, что контроллер расширяет компонент ContainerAware, который имеет один метод под названием setContainer. Если вы действительно этого захотите, вы можете переопределить этот метод и сделать то, что хотите.

Однако существует система событий, специально разработанная для такого рода вещей, то есть выполнение определенных методов до того, как начнется действие метода. Возможно, вы захотите немного поискать другие вопросы по этой теме.

Контроллер S2.1 теперь имеет метод getUser(). Я бы предложил добавить его в класс базового контроллера и не беспокоиться об этом.

1

Не знаю, какой класс вы расширили, но контроллер symfony не имеет конструктора. Таким образом, это точно, как сообщение предложить

Fatal error: Cannot call constructor in 
/Sites/src/DEMO/DemoBundle/Controller/Frontend/HomeController.php on line 11 

Line 11 is "parent::__construct();" 

Он не может вызывать конструктор, потому что не существует.

public function __construct() 
{ 
    $user = $this->get('security.context')->getToken()->getUser(); 
} 

Стоит отметить, что вам даже не нужно расширять какой-либо класс или реализовывать какой-либо интерфейс. Symfony2-контроллер может быть полностью независимым автономным классом.

the Official Documentation is shockingly bad!

Где документация предлагает вызвать конструктор родителей;)

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