2014-10-30 2 views
0

Я имею затруднение при конфигурировании Doctrine Extension Taggable представлена ​​здесь: https://github.com/FabienPennequin/DoctrineExtensions-TaggableНастройка DoctrineExtensions-Taggable в Symfony fullstack с config.yml

Мой проект использует Symfony 2 Fullstack и моя конфигурация использует YAML в то время как мои доктрины сущности являются используя аннотацию. Я установил DoctrineExtensions с помощью композитора. Добавляем «fpn/doctrine-extensions-taggable»: «dev-master» в раздел require на composer.json, а затем запускаем composer update. Это установлено без проблем.

Я тогда потерялись в этом разделе: https://github.com/FabienPennequin/DoctrineExtensions-Taggable#setup-doctrine

Я понимаю, что метаданные Доктрина Entity, однако, как уже упоминалось ранее, я использую YAML для моей конфигурации симфони, а также менеджеров сущностей. Вот выдержка из моего файла config.yml:

# Doctrine Configuration 
doctrine: 
    dbal: 
     default_connection: default 
     connections: 
      default: 
       driver: "%database_driver%" 
       host:  "%database_host%" 
       port:  "%database_port%" 
       dbname: "%database_name%" 
       user:  "%database_user%" 
       password: "%database_password%" 
       charset: UTF8 
    orm: 
     default_entity_manager: main 
     auto_generate_proxy_classes: "%kernel.debug%" 
     entity_managers: 
      main: 
       connection: default 
       mappings: 
        VendorMainBundle: 
         prefix: Vendor\MainBundle\Entity 
      taggable: 
       connection: default 
       mappings: 
        taggable: 
         type: xml 
         prefix: DoctrineExtensions\Taggable\Entity 
         dir: %kernel.root_dir%/../vendor/fpn/doctrine-extensions-taggable/metadata 

Однако, когда я бегу php app/console doctrine:mapping:info --em=taggable я получаю ошибку:

[Exception]                                           
    You do not have any mapped Doctrine ORM entities according to the current configuration. If you have entities or mapping files you should check your mapping configuration for errors. 

Если вышеприведенная команда показать сопоставления, описанные в xml files? Это позволяет мне обновлять схему в базе данных?

Я использовал этот documenation в качестве ссылки для файла config.yml: http://symfony.com/doc/current/reference/configuration/doctrine.html#mapping-configuration

Я также добавил это под config.yml для того, чтобы настроить TagListener. Это верно?

services: 
    taggable: 
     class: DoctrineExtensions\Taggable\TagListener 

РЕДАКТИРОВАТЬ [@ Grimv01k]: TagListener требует передачи аргумента, который является экземпляром объекта TagManager. Я создал другую службу для обработки, что, как следует и передал его TagListener:

tag.manager: 
     class: DoctrineExtensions\Taggable\TagManager 
     tags: 
     - { name: doctrine.event_subscriber, connection: default } 
     arguments: 
      entity.manager: @doctrine.orm.entity_manager 
    taggable: 
     class: DoctrineExtensions\Taggable\TagListener 
     arguments: 
      manager: @tag.manager 

TagManager требует аргумент в EntityManager, однако при этом приводит к ошибке:

[Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException]          
    Circular reference detected for service "doctrine.dbal.default_connection", path: "doctrine.dbal.default_connection". 

Через сеть это рекомендуется разрешить эту ошибку, передав @service_container, а в конструкторе объекта вытащите entity_manager, однако, будучи поставщиком, я бы предпочел не изменять их код. Есть ли другой способ?

+0

Что вы используете? Php app/console doctrine: mapping: info', без указания '-em'? – Nevertheless

+0

В нем будут перечислены все объекты, определенные в MainBundle. Они определены в пакете под папкой Entity, используя Annoation. – RDM

+0

Нашли что-нибудь, что может дать вам идею: http://stackoverflow.com/questions/17493779/symfony-exception-when-registering-new-doctrine-event-subscriber-softdeleteable – Nevertheless

ответ

0

Просто угадайте: может быть, это происходит, потому что у вас нет tags, применяемого на службе, а Doctrine не использует это в своем прохождении. Попробуйте сделать это вот так:

services: 
taggable: 
    class: DoctrineExtensions\Taggable\TagListener 
    tags: 
     - { name: doctrine.event_subscriber, connection: default } 
+0

Обновленный вопрос после применения вашего ответа. Как мне показалось, это немного улучшило ситуацию, но в результате я столкнулся с другой проблемой. – RDM

+0

Как я искал, даже ребята, которые пишут расширения, вводящие '@ service_container' и используя их внутри. Постараюсь найти больше. У позора 'Gedmo' нет' taggable', было бы проще. – Nevertheless

Смежные вопросы