2016-03-28 5 views
2

Я пытаюсь получить некоторые услуги из контейнера:

class MyController extends Controller 
{ 
    private $service; 
    public function __construct() { 
     $this->service = $this->container->get("service"); 
    } 
} 

но контейнер пустой и выбрасывает исключение:

Error: Call to a member function get() on null 

Как я могу сделать это работает? ps: Я не хочу, чтобы мой контроллер был сервисом.

ответ

3

EDIT

Вы не можете получить доступ к контейнеру службы из конструктора, так как метод setContainer еще не был вызван.

Назовите то же самое в другом методе своего контроллера, и он работает.

+0

Этот ответ неверен. Сообщение об ошибке вызывает get() на null, а код $ this-> container-> get(); поэтому свойство $ this-> container равно null. Это не вызов функции на $ this. Ниже приведен правильный ответ. Контейнер устанавливается позже с помощью установки setter, поэтому в constrictor свойство контейнера имеет значение null, еще не установленное. – Andras

+1

Отвечено обновлено. – chalasr

2

Продолжить принятый ответ.

Когда создается класс службы, сначала вызывается конструктор. Затем контейнер kernel/service проверяет, является ли объект экземпляром ContainerAware, затем вызывает метод setContainer. Параметр $container недоступен в конструкторе.

Если вы хотите сделать однократную инициализацию, как конструктор, переопределите метод setContainer и выполните инициализацию вашего контейнера.

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