

symfony2のフォームvalidation機能をymlで定義する際、Aというフィールドのvalueが1の場合のみBというフィールドをrequiredにしたいのですが、そのような条件付きvalidationのymlでの書き方を教えてください。

宜しくお願いします。


CC BY-SA 3.0
2015-11-24T03:19:29.423
19229
2016-10-03T03:26:53.250
2015-11-24T08:06:16.033
76
13381
question
symfony2
条件つきvalidationをymlで定義する方法


requiredにしたいという動機がどこにあるのかで対応方法が変わると思います。  
フォーム上(ブラウザ側)で制御したい場合は、Symfonyで行うよりJavaScript側で対応したほうがいいと思います。

もし「Aというフィールドが「Aというフィールドのvalueが1の場合のみ、Bというフィールドが空だったらバリデーションエラーにする」という条件なら、Callbackを使うことで対応できます。

Yaml側

[code]

    # src/AppBundle/Resources/config/validation.yml
    AppBundle\Entity\Author:
        constraints:
            - Callback: [validate]
    
[/code]

Entity側

[code]

    <?php
      use Symfony\Component\Validator\Context\ExecutionContextInterface;
    
    
      class Author 
      {
        private $a;
    
        private $b;
    
        public function validate(ExecutionContextInterface $context) {
          if (!empty($this->a) && empty($this->b)) {
            $context->buildViolation('Aを入力している場合はBを必ず入力してください。')
              ->atPath('b')
              ->addValidation();          
          }        
        }
    
    
      }
    
[/code]

このようにコールバックバリデーションを利用すれば、柔軟にバリデーションする事が可能になります。

詳しくはSymfonyのドキュメントを参照してください。情報が細かく記載されています。  
<http://symfony.com/doc/current/reference/constraints/Callback.html>


CC BY-SA 3.0
2015-12-27T14:37:54.293
20421
2015-12-27T14:37:54.293
5597
19229
answer