Php Symfony密码重置,无FOS捆绑包
我正在尝试制作一个用户可以轻松更改密码的表单。我希望我的逻辑是正确的,但是我得到一个错误如下Php Symfony密码重置,无FOS捆绑包,php,symfony,Php,Symfony,我正在尝试制作一个用户可以轻松更改密码的表单。我希望我的逻辑是正确的,但是我得到一个错误如下 Expected argument of type "string", "AppBundle\Form\ChangePasswordType" given 这是我的控制器 public function changePasswdAction(Request $request) { $changePasswordModel = new ChangePassword(); $form =
Expected argument of type "string", "AppBundle\Form\ChangePasswordType" given
这是我的控制器
public function changePasswdAction(Request $request)
{
$changePasswordModel = new ChangePassword();
$form = $this->createForm(new ChangePasswordType(), $changePasswordModel);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// perform some action,
// such as encoding with MessageDigestPasswordEncoder and persist
return $this->redirect($this->generateUrl('homepage'));
}
return $this->render(':security:changepassword.html.twig', array(
'form' => $form->createView(),
));
}
这是我的模型
class ChangePassword
{
/**
* @SecurityAssert\UserPassword(
* message = "Wrong value for your current password"
* )
*/
protected $oldPassword;
/**
* @Assert\Length(
* min = 6,
* minMessage = "Password should by at least 6 chars long"
* )
*/
protected $newPassword;
/**
* @return mixed
*/
public function getOldPassword()
{
return $this->oldPassword;
}
/**
* @param mixed $oldPassword
*/
public function setOldPassword($oldPassword)
{
$this->oldPassword = $oldPassword;
}
/**
* @return mixed
*/
public function getNewPassword()
{
return $this->newPassword;
}
/**
* @param mixed $newPassword
*/
public function setNewPassword($newPassword)
{
$this->newPassword = $newPassword;
}
}
这是我的更改密码类型
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class ChangePasswordType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('oldPassword', 'password');
$builder->add('newPassword', 'repeated', array(
'type' => 'password',
'invalid_message' => 'The password fields must match.',
'required' => true,
'first_options' => array('label' => 'Password'),
'second_options' => array('label' => 'Repeat Password'),
));
}
}
这是我的观众
{{ form_widget(form.current_password) }}
{{ form_widget(form.plainPassword.first) }}
{{ form_widget(form.plainPassword.second) }}
@dragoste提到的解决方案对我很有效。
我改了下面一行
$form = $this->createForm(new ChangePasswordType(), $changePasswordModel);
用这条线,
$form = $this->createForm(ChangePasswordType::class, $changePasswordModel);
在最近的Symfony版本中,您只能在
createForm
改变
$form = $this->createForm(new ChangePasswordType(), $changePasswordModel);
到
在问题在于
$this->createForm(新的ChangePasswordType(),$changePasswordModel)代码>createForm需要一个字符串作为第一个参数。根据bundle'your\bundle\Form\ChangePasswordType'
将完全限定的类名作为字符串提供。实际上,执行ChangePasswordType::class
总比手动输入类名好。重构代码时没有什么意外;-)@德拉戈斯特这是非常好的工作!我正在更新这个问题。
$form = $this->createForm(ChangePasswordType::class, $changePasswordModel);