我試圖用Symfony2(v2.3.6)創建一個表單並利用自動生成的HTML5約束。Symfony2自動生成的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()));
}
而且,嫩枝,沒有什麼不尋常的。
{% extends "::base.html.twig" %}
{% block body %}
{{ form(form) }}
{% endblock %}
那麼,作爲一個最終的結果,我期待animalName
領域具有pattern
屬性與價值(cat|dog)
。正如它在this link中所述,Symfony將生成此約束的htmlPattern
(我測試了它,它返回.*(cat|dog).*
,這沒問題),並且此屬性將用於客戶端驗證,使用input
元素上的pattern
HTML屬性。但沒有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
@Paulpro基本上,Symfony開發人員告訴我,這種行爲是故意的,當你手動設置表單類型時,就會發生這種行爲,這是我的POV的無意義:https://github.com/symfony/symfony/issues/3661 – eagleoneraptor