簡體   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