2016-09-15 4 views
0

Я пытаюсь использовать инъекцию зависимостей в моем контроллере. Я использую FOSRestController.Symfony FOSRestController как услуга (инъекция зависимостей)

я получил ошибку:

Bundle "app.person_rest_controller" не существует, или он не включен. Может быть, вы забыли добавить его в метод registerBundles() из вашего файла AppKernel.php? в /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. Вам необходимо установить FosRESTBundle с помощью композитора
  2. Вам необходимо включить его в вас AppKernel. php

Данные оба объясняются на official Symfony documentation.
Как правило, вы найдете AppKernel.php под /symfony/project/root/doc/app/AppKernel.php

+0

Извините, я забыл показать свой AppKernel, он уже включен – Xero