Jea*_*ean 1 doctrine symfony entitylisteners
根据如何使用Sytrfony 2.4的Doctrine Entity Listener?在Symfony中设置实体监听器功能应该非常简单.
不幸的是,我的听众nevers被召唤,我不知道为什么.我已经检查了doctrine包的编译器传递以及DefaultEntityListenerResolver类.我的监听器被传递给寄存器方法,然后应该可用.另一方面,解决方法似乎从未被调用过.
这是我的服务定义:
insite.entity.listener.page_node:
class: NutCase\InSiteBundle\Entity\PageNodeListener
tags:
- { name: doctrine.orm.entity_listener }
Run Code Online (Sandbox Code Playgroud)
这是我的倾听者:
namespace NutCase\InSiteBundle\Entity;
use Doctrine\ORM\Event\LifecycleEventArgs;
class PageNodeListener
{
public function prePersist( PageNode $node, LifecycleEventArgs $event )
{
die("okay");
}
}
Run Code Online (Sandbox Code Playgroud)
在这里我的实体yaml:
NutCase\InSiteBundle\Entity\PageNode:
type: entity
table: page_node
repositoryClass: NutCase\InSiteBundle\Entity\PageNodeRepository
fields:
title:
type: string
length: 255
nullable: false
segment:
type: string
length: 255
nullable: false
url:
type: string
length: 255
nullable: false
root:
type: boolean
nullable: false
hidden:
type: boolean
nullable: false
Run Code Online (Sandbox Code Playgroud)
我已经在YAML中添加了一个"entityListeners"条目,因为我认为这个条目丢失了:
entityListeners:
- PageNodeListener // Also tried the full namespace
Run Code Online (Sandbox Code Playgroud)
每当我尝试加载PageNode实体时,只会导致以下错误:
[Symfony\Component\Debug\Exception\ContextErrorException]
Warning: Invalid argument supplied for foreach()
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我刚刚找到解析YAML的代码以及entityListeners键:YamlDriver.由于我没有找到任何关于此密钥的YAML配置的文档,我必须检查代码,这导致我得到的答案是实体监听器的正确YAML标记应该是:
Your\Entity\Namespace:
entityListeners:
Path\To\Your\Listener: ~
Run Code Online (Sandbox Code Playgroud)
如果要将特定方法映射到特定事件,则应使用:
Your\Entity\Namespace:
entityListeners:
Path\To\Your\Listener:
prePersist: [methodOnYourListener]
Run Code Online (Sandbox Code Playgroud)
如果有任何文件,猜猜问题就是针.
我还想指出,您不必将您的听众注册为服务.实体的YAML映射中的类名实际上足以让它运行,因为DefaultEntityListenerResolver将创建一个实例(如果还没有).如果您有其他依赖项,则只需将侦听器注册为服务,例如安全上下文.
归档时间: |
|
查看次数: |
1496 次 |
最近记录: |