2017-01-26 3 views
3

私は現在、単純なことをするのに多くの時間を浪費しています。1つのフィールドに対してバリデータの制約を削除しました

特定のフィールドのsymfonyからフォームチェッカー/バリデータを削除します。

ビルダーの作業OKこのイベントリスナーを追加する:

->addEventListener(
    FormEvents::POST_SUBMIT, 
    function (FormEvent $event) { 
     $event->stopPropagation(); 
    }, 
    900 
) 

しかし、それはすべてのフィールドのチェッカーを無効にする、と私は唯一のフィールドにしたいです。

'required' => false'csrf_protection' => falseはトリック

に任意のヘルプのおかげを行いません。

答えて

0

制約は多くの方向から来る可能性があります。あなたの質問から、あなたが取り除こうとしている制約がどこから来たのかは分かりません。

  • AppBundle /リソース/検証。[YML | XML | PHP]一つだけが発見された場合、制約を削除または修正/コメントエンティティ名と、フィールドの名前を探します。

  • フォームタイプは、あなたがあなたのタイプの内側に制約がある場合は、ちょうどあなたのEntityType.phpクラスを開いて、フィールド名を探し、内部constraints

  • requiredオプションのためのオプションがあるかどうかをチェック制約symfony docを適用することができますタイプと<input type="date">はクライアント側で制約を適用することができますので、削除する種類の制約ではないことを確認してください。requiredを削除しましたが、input type fieldが残っている可能性があります。

  • そしてあなたは制約を持つことができますが、あなたは、あなたがその隠された制約

symfonyの制約を担当するコードを見つけるのを助けることができるあなたのソースファイル内のエラーメッセージの検索を使用しているバンドルからイベントの内側に適用されます失敗時に人間が読めるエラーメッセージを返します。

P.S. requiredは制約ではありませんが、同様に見えることがあります。

+0

まず、お返事ありがとうございます。 名前再開など多くのフィールドを持つフォームがあります。 タグと呼ばれるエンティティフィールド。 ユーザはJavascriptを使用してフィールドに直接タグを追加できますが、symfonyのバリデータ は、実際にユーザが選択したエンティティではないため、値が正しくないと言います。 その文字列です。 私は、$ event-> stopPropagation();のような特定のフィールドのチェックをスキップするだけです。行う。 stopPropagationがすべてのフィールドに対して行うことを除いて、私はそれを1つの特定のフィールドに適用する方法を知りたいだけです。 あなたの返信にはもう一度お返事いただき、ありがとうございます。 – ArkanoydHD

+0

あなたの問題は変圧器の制約ではありませんフォームはこのタイプを使うべきです[symfony book](http://symfony.com/doc/current/reference/forms/) types/collection.html) 'allow_add、prototype、entry_type'を注意深く見てください。' entry_type'はあなたのケースでは非常に重要です。symfonyに 'prototype'から来るデータをどのように変換するかを教えてくれるので、javascriptが必要ですプロトタイプに基づいて新しい要素を追加する;)良い読書先生:) – greenseed

関連する問題