cari

Rumah  >  Soal Jawab  >  teks badan

Adakah terdapat cara yang serasi dengan Symfony untuk mengalih keluar semua tag ranting daripada rentetan?

Saya mempunyai kekangan pengesahan Symfony yang mengalih keluar semua tag Twig dengan regex sebelum mengira bilangan aksara dan mengesahkan terhadap had panjang aksara. (Borang saya membenarkan orang ramai memasukkan subset terhad teg Twig ke dalam medan.) Jadi ia melakukan perkara berikut:

$parsedLength = mb_strlen(
        preg_replace('/{%[^%]*%}/', '', $stringValue)
    );

...Jika nilai $parsedLength terlalu panjang, ia adalah pelanggaran binaan.

Ini berfungsi, tetapi ia tidak berkesan untuk saya. Adakah terdapat cara untuk menghantar beberapa jenis perkhidmatan ke dalam kelas pengesahan saya dan kemudian menggunakan perkhidmatan itu untuk memberikan teks tanpa tag Twig? Ini nampaknya cara yang lebih harmoni untuk melakukan sesuatu daripada menggunakan ungkapan biasa.

P粉043470158P粉043470158253 hari yang lalu373

membalas semua(2)saya akan balas

  • P粉038161873

    P粉0381618732024-03-22 18:07:32

    Bolehkah anda berkongsi kod anda? Daripada apa yang saya faham, anda menggunakan logik pengesahan di dalam kekangan, tetapi ini harus masuk ke dalam pengesah.

    Langkah yang betul untuk mencapai hasil yang diinginkan ialah:

    1. Buat kekangan tersuai tanpa logik pengesahan
    2. Buat pengesah tersuai untuk kekangan ini dan konfigurasikannya sebagai perkhidmatan. Pengesah harus menerima perkhidmatan anda sebagai parameter pembina.

    Contoh:

    twig_char_lenght_validator:
        class: ...\TwigCharLengthValidator
        arguments:
            - "@your.service"
    1. Gunakan perkhidmatan suntikan untuk melengkapkan logik pengesah anda.

    Dokumentasi rasmi: https://symfony.com/doc/current/validation/custom_constraint.html

    balas
    0
  • P粉854119263

    P粉8541192632024-03-22 16:44:46

    Saya tidak pasti 100% ini adalah perkara yang anda minta, tetapi anda boleh membuat templat berdasarkan input anda dan kemudian memaparkannya. Sudah tentu keluarkan semua cawangan, walaupun saya tidak pasti anda sentiasa tahu apakah pembolehubah itu.

    Saya menyemak dan semua contoh kelihatan sangat lama dan saya tidak pasti sama ada perkara masih berfungsi. Saya tidak dapat mencari contoh dalam dokumentasi, walaupun saya pasti ia ada di suatu tempat. Bagaimanapun:

    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;
        }
    }

    Jika tiada yang lain, ini juga membolehkan anda mengesahkan templat sebenar. Tetapi seperti yang telah disebutkan, saya tidak pasti apa maksud parsed length. Bagaimanapun, createTemplate adalah (bagi saya) kaedah yang menarik.

    balas
    0
  • Batalbalas