1

我正在使用文档中定义的回调验证约束,如下所示:-

/**
 * GD\AdminBundle\Entity\Offer
 *
 * @ORM\Table(name="offers")
 * @ORM\Entity(repositoryClass="GD\AdminBundle\Repository\OfferRepository")
 * @Assert\Callback(methods={"isDateValid"})
 */
class Offer
{

...

public function isDateValid(ExecutionContext $context)
    {
        // This code block gets executed but $this->getEndDate() is NULL
        if( $this->getEndDate()->getTimestamp() < $this->getStartDate()->getTimestamp() ){
            $context->addViolation('End Date cannot be less than Start Date.', array(), null);
        }
    }

但是,如果我做一个 var_dump 和测试,我发现那$this->getEndDate()NULL

我正在使用 SonataAdminBundle 从管理员创建新的 Offer 实例。 我在这里做错了什么?

4

2 回答 2

0

听起来您正在使用正确的名称空间。

use Symfony\Component\Validator\ExecutionContext;
use Symfony\Component\Validator\Constraints as Assert;

你有这两个吗?

于 2012-05-07T06:57:11.550 回答
0

不知道你是否已经弄清楚了。但我在我的项目中有完全相同的验证。这是我所拥有的(确认可以工作):

我在我的实体中的回调: * @Assert\Callback(methods={{ "CG5\BFG\CoreBundle\Validators\EndDateValidator", "isEndDateValid"}})

我的验证器代码(单独的文件):

namespace CG5\BFG\CoreBundle\Validators;

use Symfony\Component\Validator\ExecutionContext;

class EndDateValidator
{
    static public function isEndDateValid($entity, ExecutionContext $context)
    {
        if ($entity->getEndDate() <= $entity->getStartDate())
            $context->addViolationAtSubPath('endDate', 'End Date must be after Start Date', array(), null);
    }
}
于 2012-12-09T07:00:22.687 回答