Symfony 表单断言
Symfony Forms Assert
我的事件 class 有这样一个字段:
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" 是法文,意思是活动报名开始的日期
我能够使用 GroupSequence 解决这个问题,这里有解释:
http://symfony.com/doc/current/validation/sequence_provider.html
为我的活动添加了一些代码class,一切都很好
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;
}
}
我的事件 class 有这样一个字段:
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" 是法文,意思是活动报名开始的日期
我能够使用 GroupSequence 解决这个问题,这里有解释:
http://symfony.com/doc/current/validation/sequence_provider.html
为我的活动添加了一些代码class,一切都很好
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;
}
}