Validation 自定义约束验证作为实体的服务

Validation 自定义约束验证作为实体的服务,validation,symfony,Validation,Symfony,我正在尝试为我的一个实体设置自定义constrait验证,constrait验证需要检查datatable以检查和验证字段 我遵循了这个链接:但它没有说明如何使用YAML为我的实体设置constrait验证 将constrait验证设置为类,symfony向我抛出一个错误,指出需要向该类传递EntityManager的实例 这是我的验证器: namespace Acme\BundleibBundle\Validator\Constraints; use Doctrine\ORM\EntityM

我正在尝试为我的一个实体设置自定义constrait验证,constrait验证需要检查datatable以检查和验证字段

我遵循了这个链接:但它没有说明如何使用YAML为我的实体设置constrait验证

将constrait验证设置为类,symfony向我抛出一个错误,指出需要向该类传递EntityManager的实例

这是我的验证器:

namespace Acme\BundleibBundle\Validator\Constraints;

use Doctrine\ORM\EntityManager;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;

class IsNotDayOff extends ConstraintValidator
{
    private $em;

    public $message = 'Impossible the send this day.';

    public function __construct(EntityManager $entityManager)
    {
        $this->em = $entityManager;
    }

    public function validate($value, Constraint $constraint)
    {
        $repository = $em->getRepository('AcmeRibBundle:DayOff');

        $isDayOff = $repository->findOneByDate($value);

        if ($isDayOff) {
            $this->context->buildViolation($constraint->message)
                ->addViolation();

        }
    }
}
这里是我的服务配置:

validator.is_not_day_off:
    class: Acme\Bundle\RibBundle\Validator\Constraints\IsNotDayOff
    attributes:
        - "@doctrine.orm.entity_manager"
    tags:
        - { name: validator.constraint_validator, alias: "validator.is_not_day_off" }
我也尝试这样做:

validation.yml
Acme\Bundle\RibBundle\Entity\Address:
        properties:
            deliveryDate:
                - validator.is_not_day_off: ~
但是抛出和异常也是如此


请提供一些帮助?

您似乎只有一个验证器,您正试图将其作为对您的财产的约束

您必须区分以下类别:

出现在validation.yml中的约束

class IsNotDayOff extends Constraint
{
    public $message = 'your error message';

    public function validatedBy()
    {
        //return your validator class
    }
}
您必须在services.yml中将验证器声明为服务

class IsNotDayOffValidator extends ConstraintValidator
{
    //your own logic...
}

只需将服务配置中的
属性
替换为
参数
。是的,这是一个错误,但错误持续存在约束返回的validateBy()方法是什么?您使用的是哪个版本的Symfony?我没有validateBy()方法,它是必需的?我使用的是Symfony 2.8,您能提供错误或异常吗?您是对的!我昨天做的,效果很好。谢谢