我正在尝试使用 Symfony2 (v2.3.6) 创建一个表单并利用自动生成的 HTML5 约束。
因此,我创建了一个非常简单的表单,其中只有一个带有RegEx
约束的字段:
public function formAction()
{
$form = $this->createFormBuilder()->add('animalName', 'text', array(
'constraints' => new \Symfony\Component\Validator\Constraints\Regex('/(cat|dog)/')
))->getForm();
if ($this->getRequest()->isMethod('POST')) {
$form->bind($this->getRequest());
}
return $this->render('MeTestBundle:Default:form.html.twig', array('form' => $form->createView()));
}
而且,在 Twig 中,没有什么特别之处。
{% extends "::base.html.twig" %}
{% block body %}
{{ form(form) }}
{% endblock %}
好吧,作为最终结果,我期待animalName
field 有一个pattern
value 属性(cat|dog)
。正如它在这个链接中所说的,Symfony 会生成htmlPattern
这个约束(我测试过它,它返回.*(cat|dog).*
,这没问题),并且这个属性将通过在元素上使用pattern
HTML 属性用于客户端验证。input
但是没有pattern
属性,生成的代码如下:
<input type="text" id="form_animalName" name="form[animalName]" required="required" />
经过一番研究,我认为猜测pattern
属性值的责任是Symfony\Component\Form\Extension\Validator\ValidatorTypeGuesser
,但该服务从未初始化(我在其中编写了一个die
构造函数,还强制容器获取服务以检查是否die
已到达)。
我错过了什么吗?