1

シンプルな Blowfish パスワード エンコーダーを Symfony2 に追加しようとしています。

ユーザー モデルが新しいパスワードで更新された場合、モデルを永続化する前に、パスワードのエンコードをトリガーする必要があります。preUpdateでDoctrine イベント タグを使用したいと考えていservices.xmlます。

残念ながら、それはトリガーされていません。

奇妙なことに、私もprePersistイベントを購読しており、それは正しくトリガーされています。

私が見逃している違いや、これが機能しない何らかの理由がありますか?

サービス.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);
}

もっとコードを見る必要がある場合は、声を出してください。

4

1 に答える 1

0

services.xml定義に問題はありません。PasswordEncoder.php次のように、リスニング クラス ( )のサブスクリプション情報を複製する必要があるようです。

public function getSubscribedEvents() {
    return array(
        Events::prePersist,
        Events::preUpdate,
    );
}
于 2012-05-02T12:32:25.803 に答える