Бывают ситуации, когда в конструкторе контроллера нужно вызвать сервис-контейнер, но выводится ошибка:
Error: Call to a member function get() on null
in vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php at line 350
Есть простое решение данной проблемы.
Пользовательский контроллер наследуется от класса Controller, а тот в свою очередь — от класса ContainerAware. В классе ContainerAware есть метод setContainer. Чтобы вызвать сервис-контейнер и присвоить его полю вашего контроллера, нужно переопределить метод setContainer:
<?php
namespace AppBundle\Controller;
use Symfony\Component\DependencyInjection\ContainerInterface;
class DefaultController extends Controller
{
protected $myService;
/*
* Конструктор в контроллерах не поддерживает сервис-контейнер
* поэтому вместо конструктора вызываем метод setContainer()
* */
public function setContainer(ContainerInterface $container = null)
{
parent::setContainer($container);
$this->myService = $this->get('my.service');
}
}
Точно работает в версиях Symfony 2.7, 2.8, 3.0