Doctrine orm Doctrine2事件侦听器?订户?派遣?

Doctrine orm Doctrine2事件侦听器?订户?派遣?,doctrine-orm,zend-framework2,Doctrine Orm,Zend Framework2,我已经把文档读了好几遍,但是我遗漏了一些东西。。我好像没办法让这件事成功 场景:我有一个Tshirts实体(id,qtyTotals)和一个size实体(tshirt_id,size,qty),每次创建、更新或删除新尺寸时,我都需要通过选择所有尺寸,将它们相加并更新总数来更新Tshirts.qtyTotals 我确信我可以从我的控制器上分两步完成这项工作,但我觉得事件方法是正确的 我一直在读这篇文章,特别是2.4节 我试图使用注释:@ORM\EntityListeners({“TshirtLis

我已经把文档读了好几遍,但是我遗漏了一些东西。。我好像没办法让这件事成功

场景:我有一个Tshirts实体(id,qtyTotals)和一个size实体(tshirt_id,size,qty),每次创建、更新或删除新尺寸时,我都需要通过选择所有尺寸,将它们相加并更新总数来更新Tshirts.qtyTotals

我确信我可以从我的控制器上分两步完成这项工作,但我觉得事件方法是正确的

我一直在读这篇文章,特别是2.4节

我试图使用注释:@ORM\EntityListeners({“TshirtListener”}),但找到了该类,但从未执行过它

如何定义事件?我如何发送它们?侦听器和订阅者之间的区别是什么

请举一个简单的例子


多谢各位

您可以使用
onBootstrap
函数中模块
module.php
类中的条令事件管理器将事件附加到实体,如下所示:

class Module 
{
    public function onBootstrap(MvcEvent $e)
    {
        $application           = $e->getApplication();
        $sm                    = $application->getServiceManager();
        $doctrineEntityManager = $sm->get('doctrine.entitymanager.orm_default');
        $doctrineEventManager  = $doctrineEntityManager->getEventManager();
        $doctrineEventManager->addEventListener(
            array(\Doctrine\ORM\Events::prePersist, \Doctrine\ORM\Events::preUpdate),
            new \Application\Listener\MyEntityListener($sm)
        );
    }
}
在监听器中,你可以做任何你想做的事情,例如:

namespace Application\Listener;

class EntityListener
{
    private $sm;

    public function __construct($sm)
    {
        $this->sm = $sm;
    }

    public function prePersist($eventArgs)
    {
        $entity = $eventArgs->getEntity();
        if (method_exists($entity, 'setTotals')) {
            //Update entity totals
        }
    }

    public function preUpdate($eventArgs)
    {
        $entity = $eventArgs->getEntity();
        if (method_exists($entity, 'setTotals')) {
            //Update entity totals
        }
    }
}

T恤和尺码之间的关联类型是什么?