【发布时间】:2023-03-18 04:05:01
【问题描述】:
我正在尝试使用 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 字段具有pattern 属性,其值为(cat|dog)。正如this link 中所说,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 的服务)。
我错过了什么吗?
【问题讨论】:
-
我在 Symfony 2.5 中仍然存在这个问题。你解决了吗?
-
@Paulpro 基本上,Symfony 开发人员告诉我,这种行为是故意的,并且在您手动设置表单类型时发生,从我的 POV 来看这是毫无意义的:github.com/symfony/symfony/issues/3661