Validation 在Symfony2中将自定义验证器创建为服务
我正在尝试向我的自定义验证器发送EntityManager对象。为此,我创建了一个服务,并将实体管理器定义为一个参数 问题是参数没有发送到验证器,它在_构造函数中触发了一个错误,表明没有传递任何参数 这是我的服务的定义:Validation 在Symfony2中将自定义验证器创建为服务,validation,symfony,service,Validation,Symfony,Service,我正在尝试向我的自定义验证器发送EntityManager对象。为此,我创建了一个服务,并将实体管理器定义为一个参数 问题是参数没有发送到验证器,它在_构造函数中触发了一个错误,表明没有传递任何参数 这是我的服务的定义: dinamic.shop.validator.deliverydate: class: Dinamic\ShopBundle\Validator\Constraints\DeliveryDateValidator arguments: - @d
dinamic.shop.validator.deliverydate:
class: Dinamic\ShopBundle\Validator\Constraints\DeliveryDateValidator
arguments:
- @doctrine.orm.entity_manager
tags:
- { name: validator.constraint_validator, alias: deliverydate }
以下是我的约束的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
这很可能是其中一个语法问题 语法可以是这样的:
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
....
我发现了错误。问题是函数“validateBy”,它应该由 所以我需要做的唯一改变就是改变这个函数
谢谢您的帮助@Patt对不起,我已经尝试了两种语法,但都不起作用。console命令还以相同的名称输出服务,因此参数名称是正确的。此外,我尝试将服务的“class”参数更改为不存在的参数,但没有任何更改,因此根本不使用服务配置。