【问题标题】:Configuring DoctrineExtensions-Taggable in Symfony fullstack with config.yml使用 config.yml 在 Symfony fullstack 中配置 DoctrineExtensions-Taggable
【发布时间】:2014-10-30 12:55:52
【问题描述】:

我在配置此处提供的 Doctrine Extension Taggable 时遇到困难: https://github.com/FabienPennequin/DoctrineExtensions-Taggable

我的项目使用 Symfony 2 Fullstack,我的配置使用 yaml,而我的学说实体使用注释。我使用作曲家安装了 DoctrineExtensions。将 "fpn/doctrine-extensions-taggable": "dev-master" 添加到 composer.json 的 require 部分,然后运行 ​​composer update。这安装没有问题。

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

我知道元数据是一个 Doctrine 实体,但是如前所述,我将 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 files 中描述的映射? 从而允许我更新数据库中的架构?

我将此文档用作 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 来解决此错误,但是作为供应商,我不希望修改他们的代码。还有其他方法吗?

【问题讨论】:

  • 你运行了什么php app/console doctrine:mapping:info,没有指定--em
  • 它将列出 MainBundle 中定义的所有实体。这些是使用 Annoation 在 Entity 文件夹下的 bundle 中定义的。
  • 发现了一些可能会给你一个想法的东西:stackoverflow.com/questions/17493779/…

标签: php symfony doctrine-orm


【解决方案1】:

只是猜测:可能是因为您没有在服务中应用tags,而且 Doctrine 没有在您的编译器通行证中使用它。尝试这样做:

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

【讨论】:

  • 应用您的答案后更新的问题。这似乎让我更进一步,但结果遇到了另一个问题。
  • 正如我所搜索的,即使是编写扩展注入 @service_container 并在内部使用它的人。将尝试找到更多。羞耻Gedmo 没有taggable,会更容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
相关资源
最近更新 更多