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

Итак, я сделал новую установку 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):
}
}

1

Решение

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

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

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

Другие решения

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

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

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

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

$this->get('security.token_storage')
0
По вопросам рекламы [email protected]