symfony2 Form
とValidator
コンポーネントでクライアントサイドフォームの検証を作成すると非常に便利だと思います。symfony2でクライアント側とサーバ側の両方の検証を組み合わせて作成する
これを行う最善の方法は、検証制約をフォームビューに渡すことです。その情報で このようなものにフォームフィールドをレンダリングするテンプレートを作成することが可能であろう:
<div>
<label for="form_email">E-Mail</label>
<input
id="form_email" type="text" name="form[email]" value=""
data-validation-constraints='{"NotBlank":{},"MinLength":{"limit":6}}'
/>
</div>
JavaScriptの一部はその後data-validation-constraints
属性を持つすべての<input>
の要素を検索し、正しい検証を作成することです彼らのために。
フォームビューに検証制約を渡すには、フォームタイプ拡張を作成することをお勧めします。それは私の質問のポイントです:これは正しい方法ですか?これはどのように可能ですか?現時点で
は私のフォームタイプの拡張機能は次のようになります。use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormView;
use Symfony\Component\Form\FormBuilder;
class FieldTypeExtension extends \Symfony\Component\Form\AbstractTypeExtension{
public function getExtendedType(){
return 'field';
}
public function buildView(FormView $view, FormInterface $form)
{
// at this point i didn't find a way to get the
// validation constraints out of the $form
// the `getAllValidationConstraints` here is just an example
$view->set('validation_constraints', $form->getAllValidationConstraints());
}
}
どのように私はFormInterfaceオブジェクトのうちの1つのフォームフィールドに適用されるすべての検証制約を得ることができますか?
FIELDTYPEがすでに直接表示するには、のattr VARとして渡されるフォームにのattr属性を渡します。
JavaScript検証の支配者にフォームタイプの制約を変換し、新しいsymfonyの2バンドルです。現時点では、エンティティのアノテーションで定義されている制約のみで動作します。どこから来たかに関わらず、すべての制約を取りたいと思っています。 'isValid'メソッドが使用するconstaintsを見つけるために同じメカニズムを使いたいと思います。 – ausi