2013-08-16 37 views
1

我在我自己的堆棧中使用Form組件,並且我需要創建一個約束/驗證器對。我可以更改Constraint或ConstraintValidator中的值嗎?

問題是我需要修改約束內的值。例如:如果值爲123,請將其更改爲456.

我該怎麼做?我需要它由約束或驗證器來處理,因爲我不想在整個地方重複這個邏輯。

+1

你真的不希望驗證器更改你的數據。你看過DataTransformers嗎? http://symfony.com/doc/current/cookbook/form/data_transformers.html?如果這些不適合你,那麼也許你可以提供更多關於你爲什麼需要改變價值的細節。 – Cerad

回答

1

在您的自定義約束中,如果它是表單類約束,則可以訪問變量$object。 您應該能夠在驗證過程中調用set方法。

所以,在你自定義的約束類:

public function getTargets() 
    { 
     return self::CLASS_CONSTRAINT; 
    } 

在您的自定義ConstraintValidator

public function validate($object, Constraint $constraint) 
    { 
    /* 
    * thensomewhere in the code 
    */ 
    if($object->getNumber() == 123){ 
     $object->setNumber(456); 
    } 

一些幫助來源:

http://symfony.com/doc/current/cookbook/validation/custom_constraint.html

http://symfony.com/doc/current/reference/constraints/Callback.html

相關問題