我使用的是OhDateExtraValidatorBundle,並且因爲我的Pull Request尚未被接受,所以我需要在本地覆蓋它。Symfony2:覆蓋套件的驗證器
我讀the documentation,但不能使它適用於驗證器約束。
這裏是我做過什麼:
- 創建一個新的軟件包(這樣我就可以覆蓋一個以上的extern束),稱爲MyDateExtraValidatorBundle
添加了
getParent()
方法:public function getParent() { return 'OhDateExtraValidatorBundle'; }
寫入修改的路徑與原始的bundles相同E:
namespace MYVENDOR\MyDateExtraValidatorBundle\Validator\Constraints; use Oh\DateExtraValidatorBundle\Validator\Constraints\DateExtraValidator as ConstraintValidator; class DateExtraValidator extends ConstraintValidator { public function validate($value, Constraint $constraint) { parent::validate($value, Constraint $constraint); if (null === $value || '' === $value){ return; } if(is_object($value) && method_exists($value, '__toString')) { $value = (string) $value; } if (!$dateTime->getTimestamp()) { $this->context->addViolation($constraint->invalidMessage); return; } } }
但它永遠不會加載。
我也試過直接使用實體(使用自定義驗證器)類中的包的名稱,但也不起作用。
use MYVENDOR\MyDateExtraValidatorBundle\Validator\Constraints as OhAssert;
=>
The annotation "@MYVENDOR\MyDateExtraValidatorBundle\Validator\Constraints\DateExtra" [...] does not exist, or could not be auto-loaded.
怎樣做正確的方式?
謝謝,這正是我所需要的,在添加命名空間後完美地工作! 想到了,爲什麼它不能成爲重寫bundle Validator的「正常」方式呢?它漂亮乾淨,不需要大量的代碼行。 – Bonswouar
@Bonswouar它應該是*「普通方式」*,該功能尚未實現,如文檔鏈接所示:*「進行中」*。 – Touki
你是什麼意思的實施,如記錄? 順便說一句我有[另一個問題](http://stackoverflow.com/questions/18403366/symfony2-recursive-validation)如果你想看看! ;) – Bonswouar