在Ubuntu 16.04上使用Symfony 3.2
我创建了一个包含多个字段的FormType.php。其中一个是电话号码,所以我添加了一个约束,只能接受数字。这是电话表格的代码
->add('authorPhone', NumberType::class, array('label' => 'Numéro de téléphone',
'required' => true,
'attr' => array(
'class' => 'validate',
'id' => 'icon_telephone'
),
'constraints' => array(new Regex("#^0[1-9]([-. ]?[0-9]{2}){4}$#"))
))
之后,在我的控制器中,我添加了一个错误,告诉他们只需填写数字
public function indexAction()
{
$form = $this->createForm(FormType::class);
$form->get('authorPhone')->addError(new FormError('error message'));
return $this->render('app/main/index.html.twig', array(
'form' => $form->createView()
));
}
但是当我查看我的页面时,错误消息实际上是在没有填充字段的情况下显示的。当然,我不希望这样。
(你可以在“Numérodetéléphone”下看到,这意味着电话号码)
我只想在我的电话号码字段中输入数字,如果有字母,则应显示错误或说某些内容不正确。
答案 0 :(得分:1)
在Symfony中标准化的方法是定义一个带有约束和错误消息的实体,然后创建实体绑定表单,它将自动处理基于实体约束的验证。
但是,如果由于某种原因,你需要独立的形式,那么就可以做到。 addError()
方法用于在表单字段中添加错误“state”(例如,用于自己的验证),并且您在创建表单后立即添加错误。这就是错误不断出现的原因。
<强>更新:强>
将错误消息分配给表单字段的正确方法是invalid_message
属性(当输入的值与字段类型不对应时显示)。但是当存在用于验证的约束时,则必须根据约束验证器设置错误消息 - 因此,在您的情况下,通过具有pattern
和message
键的关联数组来设置。
接下来需要更正的是TextType而不是NumberType,因为当使用NumberType时,它不会允许输入破折号并且还会自动修剪数字中的前导零 - 这对电话号码来说太糟糕了: - )
->add('authorPhone', TextType::class, array(
'label' => 'Numéro de téléphone',
'required' => true,
'attr' => array(
'class' => 'validate',
'id' => 'icon_telephone'
),
'constraints' => array(new Regex(
array(
'pattern' => '#^0[1-9]([-. ]?[0-9]{2}){4}$#',
'message' => 'Phone error message'
)
)),
))
最后要审查的是 - 在控制器中(在表单声明之后)必须是表单提交处理例程:
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
....
您可以在Symfony的表单提交处理中了解更多信息:http://symfony.com/doc/current/forms.html#handling-form-submissions
表单呈现非常简单。用于呈现整个表单的Twig语法:
{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}
或者,如果您想逐个选择性地渲染字段:
{{ form_start(form) }}
{{ form_row(form.authorPhone) }}
{{ form_row(form.submit) }}
{{ form_end(form) }}
它将呈现包含标签和错误的完整字段