2016-04-27 10 views
1

私はいくつか問題があります。 私は検証を設定しました。 私はそこに必要な用語フィールド(NotBlank制約)を持っています。 それはうまく動作しますが、誰かがオブジェクトを編集しているときに、このフィールドの検証を無効にしたいと思います。誰かがすでにこのファイルをアップロードしているので、必須ではありません。もちろん、コントローラーには1つのフォーム、1つのビュー、2つのアクションしかありません。 どうすればこのような状況に対処できますか?Symfony3はオブジェクトを追加するときにのみフィールドを検証します

おかげ

答えて

0

これにはCallbackを使用できます。

検証がフラッシュする前に行われるので、あなたのエンティティがidを持っていないだろう、このようになります。制約を追加:私はグループについて読んますが、私はこれだけの検証を変更したい

class YourEntity 
{ 
    // ... 
    private $term; 

    /** 
    * @Assert\Callback 
    */ 
    public function validate(ExecutionContextInterface $context) 
    { 
     if (!$this->getId() && !$this->getTerm()) { 
      $context->buildViolation('This field is required!') 
       ->atPath('term') 
       ->addViolation(); 
     } 
    } 
} 
+0

これは問題ありませんが、まず注釈で検証を含む解決策を探したいと思います。 – r3m4k3

+0

私はこれを分析しました。この解決法は、このコンセプトの状況で私にとってはるかに優れています。ありがとう! :) – r3m4k3

+0

問題ありません!注釈を使用する場合は、Assert \ Expression()を使用してルールを作成できます。私はそれが可能だと確信していますが、このソリューションも同様に動作します。 –

0

あなたは、検証グループによって、この動作を実現することができます。

定義は次のようになります。

/** 
* @Assert\NotBlank(groups={"creation"}) 
*/ 
private $terms; 

そして、あなたが行う検証のために:

とき作成して

$errors = $validator->validate($someVar, null, array('edit')); 

編集時。

+0

を1つのフィールドと編集時のみ。このソリューションでは、2つのグループを作成する必要があります。それが別の方法で動作するように他のソリューションはありますか?私はこれをどこに置くべきですか?$ errors = $ validator-> validate($ author、null、array( 'registration')); ? – r3m4k3

関連する問題