我想你想像 Symfony 处理一个字段一样处理这个表单password
字段:它不会被填充。让我们看一下PasswordType:
namespace Symfony\Component\Form\Extension\Core\Type;
class PasswordType extends AbstractType
{
public function buildView(FormView $view, FormInterface $form, array $options)
{
if ($options['always_empty'] || !$form->isSubmitted()) {
$view->vars['value'] = '';
}
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'always_empty' => true,
'trim' => false,
));
}
//...
}
所以,这很简单:只需添加您的 FormType$view->vars['value'] = ''
的buildView
方法(即 CaptchaType)。这意味着该字段的数据不会被清除,但不会传递给 Twig 模板。不同的方法,但结果是一样的:验证失败后密码字段保持为空。
如果你真的很懒,你可以使用 PasswordType,但由于该字段的输入将被屏蔽 (*****),这会使烦人的验证码字段变得更糟。
您的表单类型可能如下所示:
class CaptchaType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildView(FormView $view, FormInterface $form, array $options)
{
$view->vars['value'] = '';
}
/**
* {@inheritdoc}
*/
public function getParent()
{
return __NAMESPACE__.'\TextType';
}
/**
* {@inheritdoc}
*/
public function getName()
{
return $this->getBlockPrefix();
}
/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'captcha';
}
}
编辑:刚刚发现 CaptchaBundle 采用了相同的方法。