2016-09-15 4 views
0

私は自分のコントローラに依存性注入を使用しようとしています。私はFOSRestControllerを使用しています。symfonyのFOSRestController(依存性の注入)

私はエラーを受け取っ:

バンドル "app.person_rest_controllerは" 存在しないか、それが有効になって ではありません。たぶん、あなたはあなたの AppKernel.phpファイルのregisterBundles()メソッドでそれを追加するのを忘れ? ( "/var/www/html/app/config/routing.yml" からインポートさ ある) /var/www/html/src/AppBundle/Resources/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

注:あなたが本当に必要とし、使用したいサービスに容器全体を注入していないが、ちょうどサービスなど決してこれに

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

。それはあなたのテスト容易性などを高めます。多くの依存関係に注入する必要がある場合、サービスは大きくなります。 – KhorneHoly

+0

そのことをありがとう、私はそれを検討します。 – Xero

答えて

0

下AppKernel.phpを見つけ、それは愚かな誤りだったです:

サービスコントローラーは、名前の前に@を持っていません。

変更:

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

二つの迅速な事柄、:

  1. あなたはあなたAppKernelでそれを有効にする必要が作曲
  2. 経由FosRESTBundleをインストールする必要があります。 ph

どちらもofficial Symfony documentationで説明されています。
一般的に、私は解決策を設立/symfony/project/root/doc/app/AppKernel.php

+0

申し訳ありませんが、AppKernelを表示するのを忘れました。既に有効になっています – Xero