我正在尝试向Symfony2添加一个简单的Blowfish密码编码器。
当使用新密码更新用户模型时,我需要在模型持久化之前触发要编码的密码。我想在preUpdate
中使用services.xml
Doctrine事件标记。
不幸的是它没有被触发。
奇怪的是,我也订阅了prePersist
事件并且正在被正确触发。
我缺少一些差异或某些原因不起作用?
<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>
/**
* @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);
}
如果您需要查看更多代码,请唱出来。
答案 0 :(得分:0)
好的,services.xml
定义没有任何问题。您似乎必须使用以下内容复制监听类(PasswordEncoder.php
)中的订阅信息。
public function getSubscribedEvents() {
return array(
Events::prePersist,
Events::preUpdate,
);
}