2017-01-16 61 views
0

我,我必須添加一個斷言屬性時,其他屬性等於某事。就像這樣:添加Symfony在回調中斷言

/** 
* @Assert\Callback(methods={"isChildMinor",) 
*/ 
class PatientData 
{ 
/** 
* @Assert\Date() 
*/ 
public $birthday; 

public $role; 

public function isChildMinor(ExecutionContext $context) 
{ 
    if ($this->role == 3 && check @assert\isMinor() to $birtday) { 
    =>add violation 
    } 
} 

所以,我要檢查,如果患者是未成年人(含斷言或其他出頭)如果角色比3等於如何做到這一點?

回答

2

有幾種方法可以做,你想要什麼。

1)您可以在表單中正確填寫。像這樣:

use Symfony\Component\Validator\Constraints as Assert; 

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $yourEntity = $builder->getData(); 
    //here you start the field, you want to validate 
    $fieldOptions = [ 
    'label'  => 'Field Name', 
     'required' => true, 
    ]; 
    if ($yourEntity->getYourProperty != 'bla-bla-bla') { 
    $fieldOptions[] = 'constraints' => [ 
     new Assert\NotBlank([ 
      'message' => 'This is unforgivable! Fill the field with "bla-bla-bla" right now!', 
     ]), 
    ], 
    } 
    $builder->add('myField', TextType::class, $fieldOptions); 

2)其他方法 - 在你的實體中製作自定義驗證回調函數,並在那裏直接聲明。我想,這是可能的。

3)但是從我的角度來看,最佳方式是使用幾個帶有驗證組的斷言。您需要在生日字段上指定Assert \ isMinor(groups = {「myCustomGroup」})。然後,在你的形式:

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults([ 
    'validation_groups' => function (FormInterface $form) { 
     $yourEntity = $form->getData(); 
     if ($yourEntity->role !== 3) { 
      return ['Default', 'myCustomGroup']; 
     } 
     return ['Default']; 
    }, 

希望這將是對你有幫助。

+0

我會盡力告訴你,謝謝。 – NicolaPez

+0

嗨,我試圖實現這一點,我有一個問題:我不明白的是你如何獲得驗證返回爲'myCustomGruop'。我指定這樣的Minor: /** * @Assert \ Date() * @Assert \ GreaterThan(「 - 18 years」) */ public $ birthday; 所以我不知道如何把這個返回數組。 – NicolaPez

+0

我明白這個http://symfony.com/doc/current/components/options_resolver.html和組驗證,現在一切正常。謝謝您的幫助 – NicolaPez