2

Symfony2 (v2.3.6) でフォームを作成し、自動生成された HTML5 制約を利用しようとしています。

そこで、RegEx制約付きのフィールドが 1 つだけの非常に単純なフォームを作成しました。

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フィールドにはpatternvalue の属性があると予想していました(cat|dog)このリンクにあるように、Symfony はhtmlPatternこの制約の を生成し (テストしたところ、 が返されますが、これで問題ありません)、この属性は、要素の HTML 属性.*(cat|dog).*を使用してクライアント側の検証で使用されます。ただし、属性はありません。生成されたコードは次のとおりです。patterninputpattern

<input type="text" id="form_animalName" name="form[animalName]" required="required" />

pattern少し調査した結果、属性の値を推測するのは であると思いますがSymfony\Component\Form\Extension\Validator\ValidatorTypeGuesser、このサービスは初期化されません (dieコンストラクターを記述し、サービスが到達したかどうかを確認するようにコンテナーに強制しましたdie)。

何か不足していますか?

4

2 に答える 2

0

次のコードを試してみてください:

   $form = $this->createFormBuilder()
            ->add('animalName', 'text', array(
                'pattern' => '/(cat|dog)/'
            ))
            ->getForm();

私が得たレンダリングされたHTML:

<div id="form">
<div><label for="form_animalName" class="required">Animal name</label>
<input type="text" id="form_animalName" name="form[animalName]" required="required" pattern="/(cat|dog)/">
</div>
<input type="hidden" id="form__token" name="form[_token]" value="kAg4Ww2oH9WQX6fPSyvJd4pNx-xE7B4G0NbIXtUWWDY">
</div>

https://github.com/symfony/symfony/issues/3766から回答を得ました 。詳細については、それを調べてください。

于 2014-11-23T02:33:32.943 に答える