2014-11-21 68 views
0

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

问题是参数未发送给验证程序,它在__construct()函数中触发了一个错误,指示没有参数已被传递。

这是我服务的定义:

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应用程序/控制台容器:调试| grep的验证”,我已经创建的服务出现在结果

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

回答

0

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

所以我需要做的唯一的变化就是改变这个函数。

感谢您的帮助@Patt

0

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

的语法可以这样:

或本:

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 
.... 
+0

很抱歉,但我都试过的语法和他们都没有工作。此外,console命令输出具有相同名称的服务,所以参数名称是正确的。另外,我尝试将服务的'class'参数更改为不存在的参数,而且没有任何更改,因此服务配置根本没有被使用。 – Joel 2014-11-21 13:03:02

相关问题