Symfony Controller не может получить доступ к контейнеру

Поэтому я сделал новую установку Symfony 3, пытаясь настроить несколько маршрутов API, но я не могу получить доступ к контейнеру внутри своих контроллеров.

Мой контроллер простирается от базового контроллера Symfony, у которого есть ContainerAwareTrait , но когда я пытаюсь выполнить $this->container->get('service') я получаю эту ошибку:

 "message": "Call to a member function get() on null", "class": "Component\\Debug\\Exception\\FatalThrowableError", "trace": [{ "namespace": "", "short_class": "", "class": "", "type": "", "function": "", "file": "src\\Symfony\\Bundle\\FrameworkBundle\\Controller\\Controller.php", "line": 50, "args": [] }] 

Похоже, что собственный контроллер Symfony не может найти контейнер, есть ли что-то, что мне не хватает?

Вот код контроллера:

 use FOS\RestBundle\Controller\Annotations\Get; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\JsonResponse; class UsersController extends Controller { /** * @Get() * * @return JsonResponse */ public function getUsersAction() { $users= $this->get('doctrine.orm.entity_manager')->getRepository('AppBundle:User')->findAll(); return new JsonResponse($users, 200): } } 

Наконец, нашел ответ и благодарность @ комментарий Cerad: установка по умолчанию для Symfony 3 создает файл services.yml и регистрирует каждый контроллер как службу. Отключение этого разрешило моим контроллерам доступ к контейнеру.

Это виновные строки:

  AppBundle\Controller\: resource: '../../src/AppBundle/Controller' public: true tags: ['controller.service_arguments'] 

Попробуйте использовать метод setContainer на контроллерах:

добавлять вызовы в контроллер на service.yml

  AppBundle\Controller\: resource: '../../src/YourBundle/YourController' public: true tags: ['controller.service_arguments'] calls: - [setContainer, ["@service_container"]] 

В контроллере вы можете получить доступ к контейнеру с помощью метода get() для $this , например:

 $this->get('security.token_storage')