2017-04-14 40 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; 
    } 
}