2017-03-31 13 views
2

を使用していないとき「NotBlank」制約は次のように私は、エンティティのフィールドを持つフィールドが属性を「必要」ています上:検証グループ

/** 
* @ORM\Column(nullable=true) 
* @Assert\NotBlank(groups={"myGroup"}) 
*/ 
protected $field; 

それから私は私のconfigureOptions機能(任意の検証グループなしでエンティティフォームを呼び出しますセットdata_class)。しかし、フィールドには、HTMLでrequired="required"属性で作成されている:

<input id="entity_field" name="entity[field]" required="required" type="text"> 

しかし、私はHTMLをいじるとrequired="required"を取る場合、検証はバックエンド(すなわち、NotBlankに意図したとおりに動作は適用されません。このフォームの場合)。

答えて

1

注釈@Assert\NotBlank(groups={"myGroup"})はサーバー側に関連しており、入力属性required="required"はフォームの構成で定義されています。 このフィールドは、あなたのフォームでfalseに必要なオプションを定義しなければならない必要とされていない場合は、ドキュメントhereを見て、here

必要なオプション

最も一般的なオプションが必要なオプションで、どの任意のフィールドに適用することができます。デフォルトでは、必須オプションはtrueに設定されています。つまり、フィールドが空の場合、HTML5対応ブラウザはクライアント側の検証を適用します。この動作を望まない場合は、HTML5の検証を無効にするか、フィールドの必須オプションをfalseに設定してください。

また、必須オプションをtrueに設定しても、サーバー側の検証は適用されません。つまり、ユーザーがフィールド(たとえば、古いブラウザまたはWebサービスのいずれか)に空白の値を送信した場合、SymfonyのNotBlankまたはNotNull検証制約を使用しない限り、有効な値として受け入れられます。

つまり、必要なオプションは「nice」ですが、実際のサーバー側の検証は常に使用する必要があります。

+0

しかし、 '@Assert \ NotBlank'を取り出すと' required'属性が消えます。言い換えれば、フレームワーク内の何かが 'NotBlank'を読み込み、' required = "required" 'を型に入れます。私が正しい検証グループに入っているとき、それはスマートではなく、「NotBlank」だけを読むべきですか?バグですか? – Heitor

+0

@Heitor:私の知識では、symfonyのサーバ側の検証とクライアント側の検証との間には関係がありません – Shady

+0

サーバ側とクライアント側は別々に検証するかもしれませんが、特定の@Assert制約を設定すると両方で動作します。フィールドに 'NotBlank'を設定しようとすると、あなたのHTMLに' required = "required" 'が自動的に入ります。 'Length'制約を設定すると、' maxlength = "X" 'となります。 もちろん、私はSymfony Standard Editionのデフォルト動作を想定しています。 – Heitor

関連する問題