2016-04-27 40 views
1

我遇到了一些問題。 在實體中我設置了驗證。 我有那裏的術語字段,這是必需的(NotBlank約束)。 它工作正常,但當某人正在編輯對象時,我想禁用此字段上的驗證;那麼它不是必需的,因爲有人已經上傳了這個文件。當然,我在控制器中只有一種形式,一種觀點和兩種行爲。 我該如何處理這種情況?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

我閱讀羣體,但我只是想只更改驗證此一個字段,只有在編輯時。在這個解決方案中,我必須製作2組。有沒有其他的解決方案,讓它以另一種方式工作?順便說一句,我應該把這個:$ errors = $ validator-> validate($ author,null,array('registration')); ? – r3m4k3

相關問題