nis*_*ooy 4 change-password symfony fosuserbundle sonata-admin
我无法通过sonataadmin仪表板更新用户密码.
我使用symfony2 FosUserBundle2.0 SonataAdminBundle(但不使用SonataUserBundle)并按照文档进行操作.
MyUserBundle\Admin\UserAdmin.php class UserAdmin像这样扩展Admin
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
......
->add('plainPassword', 'repeated', array(
'type' => 'password',
'options' => array('translation_domain' => 'FOSUserBundle'),
'first_options' => array('label' => 'form.password'),
'second_options' => array('label' => 'form.password_confirmation'),
'invalid_message' => 'fos_user.password.mismatch',
'required' => false,
)
)
..
}
Run Code Online (Sandbox Code Playgroud)
使用sonataadminbundle仪表板创建新用户时没有问题,但是当我使用仪表板更新密码时,DB中的密码不会更改.
其他人可以更新但密码,我不知道为什么.没有任何错误信息.
我是symfony2的新手,有人帮我吗?
感谢kwozny,现在我修复它〜 我不改变函数configureFormFields代码,只需按照kwozny的建议,添加以下代码.我不知道为什么,但我工作!我可以更新密码,当我更新其他密码(密码字段为空)时,密码不会更改.
public function prePersist($object)
{
parent::prePersist($object);
}
public function preUpdate($object)
{
parent::preUpdate($object);
}
Run Code Online (Sandbox Code Playgroud)
那是因为您必须捕获对象User(preUpdate()和prePersist())并使用$ user-> setPlainPassword设置密码.这就是我的代码看起来如何:
代替:
->add('plainPassword', 'repeated', array(
'type' => 'password',
'options' => array('translation_domain' => 'FOSUserBundle'),
'first_options' => array('label' => 'form.password'),
'second_options' => array('label' => 'form.password_confirmation'),
'invalid_message' => 'fos_user.password.mismatch',
'required' => false,
)
)
Run Code Online (Sandbox Code Playgroud)
我有:
->add('newPass', 'text', array(
'label' => 'New password (empty filed means no changes)',
'required' => FALSE
))
Run Code Online (Sandbox Code Playgroud)
然后在同一个管理文件中:
public function prePersist($object) {
parent::prePersist($object);
$this->updateUser($object);
}
public function preUpdate($object) {
parent::preUpdate($object);
$this->updateUser($object);
}
public function updateUser(\AppBundle\Entity\User $u) {
if ($u->getNewPass()) {
$u->setPlainPassword($u->getNewPass());
}
$um = $this->getConfigurationPool()->getContainer()->get('fos_user.user_manager');
$um->updateUser($u, false);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2604 次 |
| 最近记录: |