2017-09-24 9 views
0

組み込みフォームの全部または何も検証エラーの表示:Optional embed form in Symfony 2:私は、エンティティ電話用の埋め込みフォームを持つエンティティするためのフォームを持っているsymfonyの3:私はここで説明するように、正確に同じ問題を抱えている

。ユーザーはのすべてのフィールドを空白のままにしてフォームを有効にできます。しかし、の電話番号が入力された場合、すべて電話 -fieldsが有効である必要があります。私の最初のアプローチの間に

は、私は単に@Assert\NotNull()なし@Assert\Valid()電話プロパティを注釈付き。新しいPersonを入力した場合にのみ問題ありません。既存のの人物の電話機が既に入力されている場合は、電話フィールド(有効であるはずです)を削除しても有効な送信にはなりません。

検証コールバック関数とthis solutionの検証はsymfonyの3のためにいくつかの変更で動作します:

/** 
* 
* @Assert\Callback() 
*/ 
public function validatePhone(ExecutionContextInterface $context) 
{ 
    if (/* Fields are not empty */) 
    { 
     $context->getValidator()->inContext($context)->validate($this->phone); 
    } 
} 

しかし、フォームを送信した後、携帯電話のフィールドの検証エラーは、ページには表示されません。私はデバッグツールバーでしか見ることができません。

フォーム提出後にエラーが表示されるように、この解決策を何とか変更する必要がありますか?

でも多分、私の最初のアプローチはうまくいくかもしれない、電話のすべてのフォームフィールドがクリアされた場合は、nullに既存のオブジェクトのプロパティ電話を設定することが何とか可能ですか?

答えて

0

cascade_validation(be carefull removed from symfony3)を使用しようとあなたにformTypeクラスで

答え自分自身が見つかり
->add('phone', 'collection', array(
      'type' => 'text', 
      'allow_add' => true, 
      'error_bubbling' => false, 
      'cascade_validation' => true, 
     )); 
0

error_bubbling:

を私がために作られたother postから解決策の変更は、それをできるようにしてみてくださいSymfony 3.3の作業は異なっている必要があります:

/** 
* 
* @Assert\Callback() 
*/ 
public function validatePhone(ExecutionContextInterface $context) 
{ 
    if (/* Fields are not empty */) 
    { 
     $context->getValidator()->validate($this->phone); 
    } 
} 
関連する問題