我在配置此处提供的Doctrine Extension Taggable时遇到了困难: https://github.com/FabienPennequin/DoctrineExtensions-Taggable
我的项目正在使用Symfony 2 Fullstack,我的配置使用yaml,而我的学说实体正在使用注释。我使用composer安装了DoctrineExtensions。将“fpn / doctrine-extensions-taggable”:“dev-master”添加到composer.json上的require部分,然后运行composer update
。安装没有问题。
然后我迷失在这一部分:https://github.com/FabienPennequin/DoctrineExtensions-Taggable#setup-doctrine
我理解元数据是一个Doctrine Entity但是如前所述,我使用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,但是作为供应商我不想修改他们的代码。还有另一种方式吗?
答案 0 :(得分:0)
猜猜:可能发生这种情况是因为你没有在服务中应用tags
,而且Doctrine在编译器传递中没有使用它。试着这样做:
services:
taggable:
class: DoctrineExtensions\Taggable\TagListener
tags:
- { name: doctrine.event_subscriber, connection: default }