【发布时间】:2016-04-21 08:07:19
【问题描述】:
我想用 FOS 实现密码更改功能,但我不知道该怎么做。
我首先创建了一个具有两个属性(旧密码和新密码(重复))的表单。
class ChangePasswordType extends UtilisateurType{
/**
* @SecurityAssert\UserPassword(
* message = "pswd ko"
* )
*/
protected $oldPassword;
/**
* @Assert\Length(
* min = 7,
* max = 255,
* minMessage = "pswd too short"
* maxMessage = "pswd too long"
* )
*/
protected $newPassword;
protected $user;
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('old', 'password', array('label' => 'Mot de passe actuel','attr' => array('placeholder' => 'Sasir votre mot de passe actuel','class' =>'form-control')));
$builder->add('newPassword', 'repeated', array(
'type' => 'password',
'invalid_message' => ' Les deux mots de passe ne sont pas identiques .',
'required' => true,
'first_options' => array('label' => 'Nouveau mot de passe', 'attr' => array('placeholder' => 'Sasir un nouveau mot de passe','class' =>'form-control')),
'second_options' => array('label' => 'Vérification', 'attr' => array('placeholder' => 'Vérification','class' =>'form-control')),
));
}
/**
* @return string
*/
public function getName()
{
return 'Mybundle_changePassword';
}
在我的控制器中,我创建了这样的表单:
$form = $this->createForm(new ChangePasswordType(), null, array(
'action' => $this->generateUrl('fos_user_change_password'),
'method' => 'POST',
));
在我的树枝中,我有这个表单和一个提交按钮(在 FOS 中操作:changePasswordAction 或 ChangePasswordController),但它不起作用。
{{ form_start(formChangerPswd) }}
{{ form_widget(formChangerPswd) }}
<div class="box-footer">
<input type="submit" value="Modify pswd" class="btn btn-primary pull-right" formnovalidate="formnovalidate"/>
</div><!-- /.box-footer -->
{{ form_end(formChangerPswd) }}
我有这个错误:
无法从“MyBundle\Entity\User”类型的对象中读取索引“oldPassword”,因为它没有实现 \ArrayAccess。
这是实现此功能的最佳方式吗? 有人可以帮我吗?
【问题讨论】:
-
您到底想达到什么目的?您是否注意到该捆绑包已经附带了此功能的表单类型?
-
我正在尝试实现修改密码功能。
-
这并不能解释为什么您自己构建表单类型,同时重用 FOSUserBundle 已经提供的其余功能。
-
你能解释一下使用fos的form和controller实现这个功能的方法吗?
-
您只需要添加一个指向
fos_user_change_password路由的链接。
标签: symfony fosuserbundle