使用config.yml在Symfony全栈中配置可标记的DoctrineExtensions


Configuring DoctrineExtensions-Taggable in Symfony fullstack with config.yml

我在配置此处提供的条令扩展标签时遇到困难:https://github.com/FabienPennequin/DoctrineExtensions-Taggable

我的项目使用Symfony 2 Fullstack,我的配置使用yaml,而我的条令实体使用注释。我使用composer安装了DoctrineExtensions。在composer.json上的require部分添加"fpn/doctrine extensions tagable":"dev-master",然后运行composer update。此安装没有问题。

然后我迷失在这个部分:https://github.com/FabienPennequin/DoctrineExtensions-Taggable#setup-条令

我知道元数据是一个条令实体,但正如前面提到的,我将yaml用于我的symfony配置以及实体管理器。以下是我的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文件中描述的映射?从而允许我更新数据库中的模式?

我使用了这个文档作为config.yml文件的参考:http://symfony.com/doc/current/reference/configuration/doctrine.html#mapping-配置

为了设置TagListener,我还在config.yml下添加了这个。这是正确的吗?

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".

在整个web中,建议通过传递@service_container来解决此错误,并在对象的构造函数中拉出entity_manager,但作为供应商,我不希望修改他们的代码。还有别的办法吗?

只是猜测:也许发生这种情况是因为你没有在服务中应用tags,而Doctrine在你的编译器通行证中没有使用它。试着这样做:

services:
taggable:
    class: DoctrineExtensions'Taggable'TagListener
    tags:
        - { name: doctrine.event_subscriber, connection: default }
相关文章:
  • 没有找到相关文章