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

时间:2012-05-02 10:28:25

标签: php symfony doctrine-orm

我正在尝试向Symfony2添加一个简单的Blowfish密码编码器。

当使用新密码更新用户模型时,我需要在模型持久化之前触发要编码的密码。我想在preUpdate中使用services.xml 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);
}

如果您需要查看更多代码,请唱出来。

1 个答案:

答案 0 :(得分:0)

好的,services.xml定义没有任何问题。您似乎必须使用以下内容复制监听类(PasswordEncoder.php)中的订阅信息。

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