1

在 Symfony2 中,我添加和编辑带有两个选择字段作为下拉列表的表单。第一个包含年份,第二个包含周。所以我想检查选定的年份和星期是否不是过去的时间。我的意思是如果年份:2013. 和第 5 周,它很好选择并希望坚持下去,但如果年份:2012. 和第 5 周,那就不好了,这里想对它发出警告。

基本上我现在使用理论实体管理器和 isValid() 来验证表单,然后我将对象保存到数据库中。

我对我在网上找到的许多方法感到有点不安。

所以我想知道哪种方式最适合我验证这些?我的意思是实体验证、非实体以及在哪里搜索它的位置。:)

太感谢了。

4

1 回答 1

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
        }
    }
}

我使用注释来指定验证,但为此您也可以使用XMLor YAML... 基本上都是一样的...

希望这可以帮助....

于 2012-11-13T08:01:08.863 回答