2016-09-15 169 views
0

我想在我的控制器中使用依賴注入。我正在使用FOSRestController。Symfony FOSRestController作爲服務(依賴注入)

我收到一個錯誤:

捆綁 「app.person_rest_controller」 不存在或者未啓用 。也許你忘了將它添加到你的AppKernel.php文件的 的registerBundles()方法中?在 /var/www/html/src/AppBundle/Resources/config/routing.yml(這是從「/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

注:從不整個容器注入到服務,只是服務等你真正需要的和想要使用。這會增加你的可測試性等等。如果你需要注入很多依賴項,你的服務會很大。 – KhorneHoly

+0

感謝您的注意,我會考慮這一點。 – Xero

回答

0

我創辦的解決方案,它是一個愚蠢的錯誤:

服務控制器沒有名字前的@。

變化:

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 
0

兩個快速的東西,特別是因爲你似乎有一條錯誤消息,實際上有助於你:

  1. ,你需要通過作曲家
  2. 您需要啓用它在你AppKernel安裝FosRESTBundle。 php

這兩個都在official Symfony documentation上解釋過。
一般來說,你會發現AppKernel.php下/symfony/project/root/doc/app/AppKernel.php

+0

對不起,我忘了顯示我的AppKernel,它已經啓用 – Xero