Existe-t-il un moyen compatible Symfony pour supprimer toutes les balises twig d'une chaîne ?
P粉043470158
P粉043470158 2024-03-22 00:03:19
0
2
340

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.

P粉043470158
P粉043470158

répondre à tous(2)
P粉038161873

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 :

  1. Créez des contraintes personnalisées sans logique de validation
  2. Créez un validateur personnalisé pour cette contrainte et configurez-le en tant que service. Le validateur doit accepter votre service comme paramètre de constructeur.

Un exemple :

twig_char_lenght_validator:
    class: ...\TwigCharLengthValidator
    arguments:
        - "@your.service"
  1. Utilisez les services injectés pour compléter votre logique de validation.

Documentation officielle : https://symfony.com/doc/current/validation/custom_constraint.html

P粉854119263

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 :

use Twig\Environment;

#[AsCommand(
    name: 'app:twig',
    description: 'Add a short description for your command',
)]
class TwigCommand extends Command
{
    public function __construct(private Environment $twig)
    {
        parent::__construct();
    }

    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $input = '{{ hello }}';
        // This is the important line
        $template = $this->twig->createTemplate($input);
        $rendered = $template->render(['hello' => 'Hello World']);
        echo $rendered . "\n";

        return Command::SUCCESS;
    }
}

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!