Dans ma demande Symfony 2 (2.4.2), il existe un type de formulaire composé de 3 champs. P>
J'aimerais que la validation soit comme ceci: si Actuellement, je vérifie les données reçues dans le contrôleur. Y a-t-il une façon plus recommandée de faire cela? P> champ A code> et champ B code> est vide, champ C code> ne doit pas être vide. Cela signifie que au moins un champ devrait recevoir certaines données. P>
3 Réponses :
Ceci est probablement un cas d'utilisation pour un . Je ne l'ai pas utilisé moi-même mais, fondamentalement, vous créez une contrainte La validation réelle est effectuée par votre et votre code> et un validateur code>. Vous spécifiez ensuite votre contrainte code> dans votre config / validation.yml code>. validator < / code>. Vous pouvez dire à Symfony de passer toute l'entité à votre méthode code> Valider code> pour accéder à plusieurs champs avec: p> valide code >:: p>
Fonctionne comme un charme! Merci!
Vous pouvez le faire avec Fournisseurs de séquence de groupe , par exemple: non pas testé, mais je pense que cela fonctionnerait p> p>
Il existe des solutions encore plus simples que d'écrire un validateur personnalisé. Le plus facile de tous est probablement la contrainte d'expression: Vous pouvez également ajouter une méthode de validation à votre classe et l'annoter avec la contrainte de rappel: P> /**
* @Assert\Callback
*/
public function validateFields(ExecutionContextInterface $context)
{
if ('' === $this->fieldA && '' === $this->fieldB && '' === $this->fieldC) {
$context->addViolation('At least one of the fields must be filled');
}
}
Je pense que cette réponse est meilleure et plus simple.