在Symfony2中,我添加并编辑了两个选项字段作为下拉列表。第一个包含年份,第二个包含年份 几个星期。所以我想检查所选的年份和周是不是过去的时间。我的意思是很好的选择,并希望坚持如果年:2013年和周:5, 但是如果年份:2012年和第5周都不好。这里想要警告它。
基本上我使用doctrine实体管理器和isValid()来验证表单,然后我将对象保存到数据库。
我对网上发现的很多方法感到有点不安。
所以我想知道哪种方式最适合我验证这些?我的意思是实体验证,非实体,以及在哪里搜索它的位置。 :)
非常感谢你。
答案 0 :(得分:1)
我会选择CallbackValidation:
http://symfony.com/doc/2.0/reference/constraints/Callback.html
在isValid()
调用期间会触发验证,以便您知道它何时失败。
至于验证码,我认为这应该做的事情(我还没有运行):
/**
* @Assert\Callback(methods={"isYearWeekValid"})
*/
class YourEntity
{
... here go $year and $week
public function isYearWeekValid(ExecutionContext $context)
{
$firstInYear = \DateTime:createFromFormat('Y-m-d', $this->year . '-01-01');
$interval = new \DateInterval(sprintf('P%dW', $this->week * 7));
$firstDayOfWeek = $firstInYear->add($interval); # beware, $firstInYear object was modified hear as well
$now = new \DateTime();
if ( $firstInWeek < $now ){
$context->addViolation('Invalid year/week combination!', array(), null);
}else{
// IT'S OK
}
}
}
我使用注释来指定验证,但为了这个目的,你也可以使用XML
或YAML
......基本上它都是一样的......
希望这会有所帮助......