Conditionally checking fields based on a different field value in Symfony2

So here is the scenario: I have a group of radio buttons. Based on their value, I should or should not check the other three fields (they are empty, contain numbers, etc.).

Can I pass all these values ​​to some kind of restriction and compare them there?

Or is a callback directly to the controller the best way to solve this problem?

Generally, what is the best practice in this case?

+7
php validation forms symfony
source share
2 answers

I suggest you use a callback validator .

For example, in your entity class:

<?php use Symfony\Component\Validator\Constraints as Assert; /** * @Assert\Callback(methods={"myValidation"}) */ class Setting { public function myValidation(ExecutionContextInterface $context) { if ( $this->getRadioSelection() == '1' // RADIO SELECT EXAMPLE && ( // CHECK OTHER PARAMS $this->getFiled1() == null ) ) { $context->addViolation('mandatory params'); } // put some other validation rule here } } 

Otherwise, you can create your own validator, as described here .

Let me know you need more information.

Hope this helps.

+2
source share

You need to use validation groups. This allows you to check the object for only some restrictions for this class. For more information, see the Symfony2 documentation http://symfony.com/doc/current/book/validation.html#validation-groups , as well as http://symfony.com/doc/current/book/forms.html# validation-groups

In the form, you can define a method called setDefaultOptions , which should look something like this:

 public function buildForm(FormBuilderInterface $builder, array $options) { // some other code here ... $builder->add('SOME_FIELD', 'password', array( 'constraints' => array( new NotBlank(array( 'message' => 'Password is required', 'groups' => array('SOME_OTHER_VALIDATION_GROUP'), )), ) )) } public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'validation_groups' => function (FormInterface $form) { $groups = array('Default'); $data = $form->getData(); if ($data['SOME_OTHER_FIELD']) { // then we want password to be required $groups[] = 'SOME_OTHER_VALIDATION_GROUP'; } return $groups; } )); } 

The following link provides a detailed example of how you can use them http://web.archive.org/web/20161119202935/http://marcjuch.li:80/blog/2013/04/21/how-to-use- validation-groups-in-symfony / .

Hope this helps!

+2
source share

All Articles