2014-01-20 89 views
0

是否有可能設置後的數據作爲類約束的選項,例如:Symfony2的約束後的數據依賴

MyEntity 
    properties: 
     field: 
      - MyConstraint: { someOption: someValue } 

我想popuate MyConstraint::someOption與提交的值。

我知道類的約束/目標,但是我會失去與約束的可重用性(因爲它綁定到一個類)。或者我應該創建第二個約束,例如:一個委託給正常約束的類約束。

或者它可以通過事件嗎? (例如,改變PRE_SET_DATA上的YAML定義的約束)

羅蘭。

回答

0

通過表單事件:)

以供將來參考找到了一種方法,這裏是我是如何做的:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    // fields etc. 

    $validator = $this->validator; // injected via DIC (service @validator) 
    $builder->addEventListener(FormEvents::SUBMIT, function(FormEvent $event) use ($validator) { 
     $entity = $event->getForm()->getData(); // populated with post data due SUBMIT event 
     $metadata = $validator->getMetadataFactory()->getMetadataFor($entity); // constraint metadata (validation.yml) 
     $metadata->addPropertyConstraint('property_field', new SomeConstraint(array(
      'someOption' => $entity->getSomeValue() // postdata... we have it :) 
     ))); 
    }); 
}