在Symfony2中将自定义验证程序创建为服务

时间:2014-11-21 11:33:04

标签: validation symfony service

我正在尝试将EntityManager对象发送到我的自定义验证器。为此,我创建了一个服务,并将实体管理器定义为参数。

问题是参数没有发送到验证器,它在__construct()函数中触发一个错误,表明没有传递任何参数。

这是我服务的定义:

dinamic.shop.validator.deliverydate:
    class: Dinamic\ShopBundle\Validator\Constraints\DeliveryDateValidator
    arguments: 
        - @doctrine.orm.entity_manager
    tags:
        - { name: validator.constraint_validator, alias: deliverydate }

这是我的Constraint的validateBy()方法:

class DeliveryDate extends Constraints
{
    ...
    public function validateBy()
    {
        return 'deliverydate';
    }
}

这是我的ConstraintValidator:

最后,这就是我在字段上设置约束的方法。该字段未映射到任何实体:

->add('deliveryday', 'date', array(
                                'label' => 'Día de entrega',
                                'widget' => 'single_text',
                                'format' => 'dd/MM/yyyy',
                                'constraints' => array(
                                            new NotBlank(),
                                            new DeliveryDate($deliveryDateOptions),
                                                    ),
                                 )
)

我认为我的错误在FormType类中,我在字段上设置了约束,但我找不到任何非映射字段的示例。

我正在使用Symfony2.3,非常感谢任何帮助。非常感谢。

[编辑]

我使用了命令“sudo php app / console container:debug | grep validator”,我创建的服务出现在结果中

dinamic.shop.validator.deliverydate container Dinamic\ShopBundle\Validator\Constraints\DeliveryDateValidator

2 个答案:

答案 0 :(得分:0)

很可能是这些语法问题之一!

语法可以是:

dinamic.shop.validator.deliverydate:
    class: Dinamic\ShopBundle\Validator\Constraints\DeliveryDateValidator
    arguments: [@doctrine.orm.entity_manager]
    tags:
        - { name: validator.constraint_validator, alias: deliverydate }

或者这个:

dinamic.shop.validator.deliverydate:
    class: Dinamic\ShopBundle\Validator\Constraints\DeliveryDateValidator
    arguments: 
        entityManager: "@doctrine.orm.entity_manager"
    tags:
        - { name: validator.constraint_validator, alias: deliverydate }

注意: 要检查您传递的服务是否存在:

php app/console container:debug | grep doctrine

会给你:

....
doctrine.orm.entity_manager    n/a       alias for doctrine.orm.default_entity_manager
....

答案 1 :(得分:0)

我发现了错误。问题是功能' validateBy'它应该是 validatedBy()

所以我需要做的唯一改变就是改变所说的功能。

感谢您帮助@Patt