繁体   English   中英

为什么Symfony2不为preUpdate触发我的Doctrine事件侦听器?

[英]Why isn't Symfony2 triggering my Doctrine event listener for `preUpdate`?

我试图将一个简单的Blowfish密码编码器添加到Symfony2。

当用新密码更新用户模型时,我需要在持久化模型之前触发密码进行编码。 我想在我的services.xml使用preUpdate Doctrine事件标记。

不幸的是它没有被触发。

奇怪的是,我还订阅了prePersist事件,并且该事件已被正确触发。

我缺少某些区别还是某些原因导致此问题不起作用?

services.xml

<service id="base.user.listener.persist" class="Base\UserBundle\Listener\PasswordEncoder">
    <tag name="doctrine.event_listener" event="preUpdate" />
    <tag name="doctrine.event_listener" event="prePersist" />
    <argument type="service" id="security.encoder.blowfish" />
</service>

PasswordEncoder.php(事件订阅者)

/**
 * @param LifecycleEventArgs $args
 */
public function prePersist(LifecycleEventArgs $args) {
    $entity = $args->getEntity();
    $entity = $this->encodePassword($entity);
}

/**
 * @param LifecycleEventArgs $args
 */
public function preUpdate(LifecycleEventArgs $args) {
    die('preUpdate');
    $entity = $args->getEntity();
    $entity = $this->encodePassword($entity);
}

如果您需要查看更多代码,只需大声疾呼。

好的,因此services.xml定义没有问题。 看来您必须使用以下方式在侦听类( PasswordEncoder.php )中复制订阅信息:

public function getSubscribedEvents() {
    return array(
        Events::prePersist,
        Events::preUpdate,
    );
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM