我正在使用documentation中定义的回调验证约束,如下所示: -
/**
* 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从管理员创建新的商品实例。 我在这里做错了什么?
答案 0 :(得分:0)
听起来你正在使用正确的命名空间。
use Symfony\Component\Validator\ExecutionContext;
use Symfony\Component\Validator\Constraints as Assert;
你有这两个吗?
答案 1 :(得分: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);
}
}