Doctrine事件订阅者 - 性能和约定

时间:2014-02-12 13:29:06

标签: symfony doctrine-orm event-listener

我有一个关于正确在Symfony2中做事的基本问题,特别强调了Doctrine事件订阅者。我知道如何实现它们,但有些东西一直困扰着我。目前,我有以下课程。

namespace MyProject\MainBundle\EventSubscriber;


use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Event\LifecycleEventArgs;
use MyBundle\MainBundle\Entity\LandingPageAggregator;

class LandingPageAggregatorSubscriber implements EventSubscriber {
    /**
     * Returns an array of events this subscriber wants to listen to.
     *
     * @return array
     */
    public function getSubscribedEvents() {
        return array(
            'prePersist',
            'preUpdate',
        );
    }

    public function prePersist(LifecycleEventArgs $args) {
        $entity = $args->getObject();
        if (!$entity instanceof LandingPageAggregator)
            return;
        // Adittional stuff here...
    }
} 

我是从this Symfony article得到的,而且工作正常,我的问题如下:

  1. 有更好的方法吗?这实际上是设置“发布者”或“创建日期”字段等内容的公认标准方式吗?
  2. 这不是性能密集型的吗?如果我错了,请原谅我,但注册其中的100个,这并不意味着对于数据库的每一个持久性,Symfony必须运行所有100个订阅者并在每个订阅者上调用prePersist方法?这似乎是资源的巨大浪费,因此这个问题的目的。
  3. 如果我在上面的数字2是正确的,那么做同样的事情是否有更好/更少的密集方法?我刚刚在doctrine's documentation上看到他们在2.4版本中引入了一个新的注释,但我还没有使用那个版本。在任何情况下都能解决这个问题吗?
  4. 作为一个附带问题,上面链接的Symfony文档中所述的监听器和用户之间有什么区别?

    感谢您的任何建议!

0 个答案:

没有答案