Php Symfony重置密码功能窗体的自定义约束
我已经为我的项目实现了一个密码重置页面。它正在工作,但我尝试使用最佳实践和可重用代码。这就是问题所在。 我有一个用于密码重置表单的表单类型和一个重置控制器。 我知道验证通常意味着将表单类型的字段映射到类的对象,并对该对象的属性拥有验证规则。 但是对于密码重置,我认为需要使用非映射字段。现在,我提交表单并在ResettingController中获取值。在那个里,我自己检查是否存在一个有电子邮件、生日和安全答案的用户。这是可行的,但我认为没有以正确的方式实施。 是否可以将自定义约束添加到整个ResetFormType,并且在提交表单时,它应该调用约束来检查用户是否存在。所以我想使用Symfony验证系统,而不是if,else,if。。。我在控制器里写的 这是我的密码: ResetPwFormType:Php Symfony重置密码功能窗体的自定义约束,php,forms,validation,symfony,constraints,Php,Forms,Validation,Symfony,Constraints,我已经为我的项目实现了一个密码重置页面。它正在工作,但我尝试使用最佳实践和可重用代码。这就是问题所在。 我有一个用于密码重置表单的表单类型和一个重置控制器。 我知道验证通常意味着将表单类型的字段映射到类的对象,并对该对象的属性拥有验证规则。 但是对于密码重置,我认为需要使用非映射字段。现在,我提交表单并在ResettingController中获取值。在那个里,我自己检查是否存在一个有电子邮件、生日和安全答案的用户。这是可行的,但我认为没有以正确的方式实施。 是否可以将自定义约束添加到整个Res
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('username', null, array(
'label' => 'resetting.request.username',
'translation_domain' => 'FOSUserBundle',
'mapped' => false
))
->add('birthday', 'date', array(
'years' => range(date('Y') - 74, date('Y') - 18),
'label' => 'register.user.contact.birthdayBlank',
'translation_domain' => 'Startup',
'mapped' => false
))
->add('plainSecurityAnswer', 'text', array(
'label' => 'register.user.security.answer',
'translation_domain' => 'Startup',
'mapped' => false
));
}
重置控制器:
$form = $this->container->get('form.factory')->create(new ResetPwFormType());
$form->handleRequest($this->container->get('request'));
$username = $form->get('username')->getData();
$birthday = $form->get('birthday')->getData();
$securityAnswer = $form->get('plainSecurityAnswer')->getData();
/** @var $user UserInterface */
$user = $this->container->get('doctrine')->getRepository('UserBundle:User')->findUserForPasswordReset($username, $birthday, $securityAnswer);
$jsonReturn = array();
if($user !== null)
{
// etc.
}
我想在这里使用$form->isValid方法,而不是将表单的每个字段保存在一个变量中,将其传递给repository方法并在那里手动检查用户是否存在。为此,我认为需要对整个表单进行约束
更新:我想我需要一个用于重置过程的模型类,并且可以向整个类添加一个自定义验证约束
注意。您可以在表单生成器中使用“约束”选项:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('username', null, array(
'label' => 'resetting.request.username',
'translation_domain' => 'FOSUserBundle',
'mapped' => false,
'constraints' => [
new YourCustomConstraint()
]
));
}
我现在为reset表单类型实现了一个模型类。在那里,我可以向属性username、birthday、securityAnswer添加约束,然后再向类本身添加约束。Ok,然后将该约束添加到我为ResetProcess创建的模型类中。对吗?通过此约束,您可以验证“用户名”字段中的值。不一定要将它添加到模型类中为什么是-1?这是官方最好的处理方法?!如果你没有得到通知,不要给它打分。