我遇到了一些問題。 在實體中我設置了驗證。 我有那裏的術語字段,這是必需的(NotBlank約束)。 它工作正常,但當某人正在編輯對象時,我想禁用此字段上的驗證;那麼它不是必需的,因爲有人已經上傳了這個文件。當然,我在控制器中只有一種形式,一種觀點和兩種行爲。 我該如何處理這種情況?Symfony3僅在添加對象時驗證字段
感謝
我遇到了一些問題。 在實體中我設置了驗證。 我有那裏的術語字段,這是必需的(NotBlank約束)。 它工作正常,但當某人正在編輯對象時,我想禁用此字段上的驗證;那麼它不是必需的,因爲有人已經上傳了這個文件。當然,我在控制器中只有一種形式,一種觀點和兩種行爲。 我該如何處理這種情況?Symfony3僅在添加對象時驗證字段
感謝
您可以使用一個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();
}
}
}
可以實現這種行爲被確認團組:
的定義是:
/**
* @Assert\NotBlank(groups={"creation"})
*/
private $terms;
而對於驗證你做:
時創建和
$errors = $validator->validate($someVar, null, array('edit'));
編輯時。
我閱讀羣體,但我只是想只更改驗證此一個字段,只有在編輯時。在這個解決方案中,我必須製作2組。有沒有其他的解決方案,讓它以另一種方式工作?順便說一句,我應該把這個:$ errors = $ validator-> validate($ author,null,array('registration')); ? – r3m4k3
這是好的,但首先我想找到一些解決方案,並在批註中進行驗證。 – r3m4k3
好吧,我已經分析過這個。在這種情況下,這種解決方案對我來說更好。謝謝! :) – r3m4k3
沒問題!如果你想使用註解,你可以嘗試使用'Assert \ Expression()'創建一個規則。我相信這是可能的,但是這個解決方案也可以。 –