Adakah terdapat cara yang serasi dengan Symfony untuk mengalih keluar semua tag ranting daripada rentetan?
P粉043470158
P粉043470158 2024-03-22 00:03:19
0
2
350

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粉043470158
P粉043470158

membalas semua(2)
P粉038161873

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

P粉854119263

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan