Symfony FOSRestController 作为服务(依赖注入)

Symfony FOSRestController as a service (Dependency injection)

我正在尝试在我的控制器中使用依赖注入。我正在使用 FOSRestController。

我收到一个错误:

Bundle "app.person_rest_controller" does not exist or it is not enabled. Maybe you forgot to add it in the registerBundles() method of your AppKernel.php file? in /var/www/html/src/AppBundle/Resources/config/routing.yml (which is being imported from "/var/www/html/app/config/routing.yml").

我的控制器看起来像:

class PersonRestController extends FOSRestController
{

    private $entityManager;
    private $container;
    private $sendNewContactRabbitMQProducer;

    public function __construct(EntityManager $entityManager, $container, Producer $rabbitMQProducer)
    {
        $this->entityManager = $entityManager;
        $this->container = $container;
        $this->sendNewContactRabbitMQProducer = $rabbitMQProducer;
    }

    public function postPersonAction(ParamFetcher $paramFetcher)
    {
        ...
    }

我的routing.yml:

service_person:
    type: rest
    prefix: /v1
    resource: "@app.person_rest_controller"
    name_prefix:  api_1_ # naming collision

还有我的 services.yml :

services:
    app.person_rest_controller:
        class: AppBundle\Controller\PersonRestController
        arguments:
            - "@doctrine.orm.entity_manager"
            - "@service_container"
            - "@person.rabbitmq.producer.send_new_contact"
    person.rabbitmq.producer.send_new_contact:
        class: AppBundle\Service\SendNewContactRabbitMQProducer
        arguments: []
        calls:
            - [setRabbitMQProducer, ["@old_sound_rabbit_mq.send_person_id_from_hotelpro4u_producer"]]
            - [setLogger, ['@logger']]

我的工作基于此:https://github.com/FriendsOfSymfony/FOSRestBundle/issues/990

一个想法?

谢谢! =)

两个快速的事情,特别是因为你似乎有一条错误消息实际上可以帮助你:

  1. 您需要通过 composer 安装 FosRESTBundle
  2. 您需要启用它 AppKernel.php

这两个在 official Symfony documentation.
上都有解释 通常,您会在 /symfony/project/root/doc/app/AppKernel.php

下找到 AppKernel.php

我创建了解决方案,这是一个愚蠢的错误:

服务控制器名称前没有@。

变化:

service_person:
    type: rest
    prefix: /v1
    resource: "@app.person_rest_controller"
    name_prefix:  api_1_ # naming collision

对此:

service_person:
    type: rest
    prefix: /v1
    resource: "app.person_rest_controller"
    name_prefix:  api_1_ # naming collision