J'ai une contrainte de validation Symfony qui supprime toutes les balises Twig avec une regex avant de compter le nombre de caractères et de valider par rapport à la limite de longueur de caractères. (Mon formulaire permet aux utilisateurs de saisir un sous-ensemble limité de balises Twig dans les champs.) Il fait donc ce qui suit :
$parsedLength = mb_strlen( preg_replace('/{%[^%]*%}/', '', $stringValue) );
...Si la valeur $parsedLength
est trop longue, c'est une violation de construction.
Cela fonctionne, mais cela ne fonctionne pas pour moi. Existe-t-il un moyen de transmettre une sorte de service à ma classe de validation, puis d'utiliser ce service pour restituer le texte sans les balises Twig ? Cela semble être une manière plus harmonieuse de faire les choses que d’utiliser des expressions régulières.
Pouvez-vous partager votre code ? D'après ce que j'ai compris, vous appliquez une logique de validation à l'intérieur de contraintes, mais cela devrait aller à l'intérieur du validateur.
Les étapes correctes pour obtenir les résultats souhaités sont :
Un exemple :
Documentation officielle : https://symfony.com/doc/current/validation/custom_constraint.html
Je ne suis pas sûr à 100 % que ce soit ce que vous demandez, mais vous pouvez créer un modèle basé sur votre entrée, puis le restituer. Bien sûr, supprimez toutes les branches, même si je ne suis pas sûr que vous sachiez toujours quelles sont les variables.
J'ai vérifié et tous les exemples ont l'air très anciens et je ne sais pas si les choses fonctionnent toujours. Je ne trouve même pas d'exemple dans la documentation, même si je suis sûr qu'il se trouve quelque part. Quoi qu'il en soit :
Si rien d'autre, cela vous permet également de vérifier le modèle réel. Mais comme déjà mentionné, je ne suis pas sûr de ce que signifie
parsed length
. Quoi qu'il en soit, createTemplate est (pour moi) une méthode intéressante.