2014-11-21 83 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

相關問題