2017-04-14 92 views
0

我有了這樣的領域事件類:Symfony的形式斷言

class Event 
{ 
    ...... 
    /** 
    * @var datetime $date 
    * 
    * @ORM\Column(name="date_debut_inscri", type="datetime") 
    * @Assert\GreaterThanOrEqual("today UTC") 
    */ 
    protected $dateDebutInscri; 
    ...... 
} 

當複選框被選中,它的設置爲空控制器此字段是隱藏的,當這個字段被隱藏的問題斷言仍然顯示錯誤信息,這讓我無法提交我的形式

我希望它在默認情況下爲空,如果用戶選擇,以填補這一領域它必須比當前日期

大於或等於我想知道我是否能夠做到這一點克等:

* @Assert\GreaterThanOrEqual("today UTC") OR @Assert\IsNull() 

其中它僅需要兩個斷言之一是真實的

PS:「dateDebutInscri」是法語,這意味着日期時刻到事件是打開

+1

嗨。這可能會幫助你http://stackoverflow.com/questions/32394077/symfony-conditional-form-validation讓我知道如果你仍然無法得到它的工作,以及爲什麼:),所以我會發表一個答案用一些代碼。 –

+0

這是太多的代碼添加這樣一個小問題,GroupSequence是一個更好的選擇,無論如何感謝 – paris93

+1

其實,這是絕對沒有太多的代碼和這個答案http://stackoverflow.com/a/32603870/4220880一個更好的解決方案,因爲它可以讓您的實體與驗證分離。 –

回答

0

我能這樣解決使用GroupSequence這個問題,在這裏解釋:

http://symfony.com/doc/current/validation/sequence_provider.html

添加一些代碼到我的活動類,它都很好

use Symfony\Component\Validator\GroupSequenceProviderInterface; 

/** 
* @ORM\Table(name="event") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\EventRepository") 
* @Assert\GroupSequenceProvider 
*/ 
class Event implements GroupSequenceProviderInterface 
{ 
...... 
    /** 
    * @var datetime $date 
    * 
    * @ORM\Column(name="date_debut_inscri", type="datetime") 
    * @Assert\GreaterThanOrEqual("today UTC", groups = {grp1}) 
    */ 
    protected $dateDebutInscri; 
...... 

    public function getGroupSequence(){ 
      $groups = ['Default', 'Event']; 

      if(!$this->getMyCheckBox()) 
      { 
       $groups[] = 'grp1'; 
      } 
      return $groups; 
    } 
}