Rumah pembangunan bahagian belakang tutorial php PHP Master | Bekerja dengan middleware langsing

PHP Master | Bekerja dengan middleware langsing

Feb 24, 2025 am 09:00 AM

Rangka Kerja Slim Middleware: Membina Aplikasi Mikro PHP yang kuat

Slim adalah rangka kerja Mini PHP yang kuat, di mana ciri middleware membolehkan pelaksanaan pelbagai perkhidmatan gaya penapis seperti pengesahan dan caching dalam aplikasi. Middleware merangkumi aplikasi dan boleh menjejaskan persekitaran aplikasi serta objek permintaan dan tindak balas.

Mata utama:

  • Middleware Slim adalah ciri yang kuat yang membolehkan pelaksanaan pelbagai perkhidmatan gaya penapis seperti pengesahan dan caching. Middleware merangkumi aplikasi dan boleh menjejaskan persekitaran aplikasi, permintaan dan tindak balas aplikasi.
  • Untuk melaksanakan middleware dalam Slim, anda perlu menulis kelas yang memanjangkan kelas SlimMiddleware dan mengatasi kaedah call(). Kaedah ini adalah titik masuk middleware, dari mana anda boleh kembali (mengganggu proses pelaksanaan) atau hubungi lapisan seterusnya. Middleware kemudian boleh memanipulasi tajuk dan badan respons.
  • Gunakan kaedah Slim add() untuk mendaftarkan middleware dalam aplikasi Slim. Pelbagai middleware boleh didaftarkan dengan panggilan seterusnya ke kaedah add(). Middleware mesti ditambah dalam susunan perintah panggilan yang bertentangan, kerana middleware baru akan mengelilingi mana -mana middleware yang ditambah sebelumnya. Konfigurasi middleware biasanya dilakukan melalui pembina perkhidmatan.

pemahaman middleware tipis

Dokumentasi Slim menyamakan aplikasi tipis ke bawang, setiap lapisan bawang adalah middleware. Ini adalah metafora yang sesuai. Untuk memahaminya dengan lebih baik, mari kita anggap kita menulis aplikasi yang menggunakan pengesahan dan caching. Senibina kami mungkin kelihatan seperti ini:

PHP Master | Working with Slim Middleware

Kod yang bertanggungjawab untuk menjana kandungan halaman dibalut dalam beberapa lapisan middleware, yang paling penting ialah logik pengesahan dan logik cache. Proses pelaksanaan melalui setiap lapisan, sama ada membenarkan aliran ke lapisan seterusnya atau dipindahkan. Periksa terlebih dahulu sama ada pengguna telah meluluskan pengesahan. Jika tidak, proses itu terganggu dan status HTTP 401 dikembalikan. Kemudian periksa sama ada salinan kandungan cache boleh digunakan. Jika ya, proses itu terganggu menggunakan salinan halaman cache halaman. Mungkin ada lapisan middleware yang lain sehingga proses akhirnya mencapai logik yang bertanggungjawab untuk menjana halaman. Apabila kaedah middleware kami kembali, proses pelaksanaan akan gelembung kembali melalui mereka. Sebagai contoh, seluruh logik middleware cache akan cache kandungan halaman untuk carian kemudian.

pelaksanaan middleware

Untuk memahami cara melaksanakan middleware tersuai, mari kita lihat kod yang boleh digunakan sebagai middleware cache yang disebutkan di atas. Sebenarnya terdapat sedikit keperluan untuk melaksanakan sebarang komponen middleware yang tipis asas. Kami hanya perlu menulis kelas yang memanjangkan kelas

dan mengatasi kaedah SlimMiddleware. Titik masuk middleware adalah kaedah call() ini, dari mana kita boleh kembali (dan dengan itu mengganggu proses pelaksanaan) atau panggil lapisan seterusnya. call()

<?php namespace MyMiddleware;

class Cache extends SlimMiddleware
{
    protected $db;

    public function __construct(PDO $db)
    {
        $this->db = $db;
    }

    public function call()
    {
        $key = $this->app->request()->getResourceUri();
        $rsp = $this->app->response();

        $data = $this->fetch($key);
        if ($data) {
            // 缓存命中...返回缓存的内容
            $rsp["Content-Type"] = $data["content_type"];
            $rsp->body($data["body"]);
            return;
        }

        // 缓存未命中...继续生成页面
        $this->next->call();

        if ($rsp->status() == 200) {
            // 缓存结果以供将来查找
            $this->save($key, $rsp["Content-Type"], $rsp->body());
        }
    }

    protected function fetch($key)
    {
        $query = "SELECT content_type, body FROM cache
            WHERE key = " . $this->db->quote($key);
        $result = $this->db->query($query);
        $row = $result->fetch(PDO::FETCH_ASSOC);
        $result->closeCursor();
        return $row;
    }

    protected function save($key, $contentType, $body)
    {
        $query = sprintf("INSERT INTO cache (key, content_type, body)
            VALUES (%s, %s, %s)",
            $this->db->quote($key),
            $this->db->quote($contentType),
            $this->db->quote($body)
        );
        $this->db->query($query);
    }

}
Salin selepas log masuk

call() Kaedah Pertama, periksa sama ada kandungan tersedia dalam cache. Jika ya, ia menetapkan header dan badan Content-Type respons dan kemudian kembali, dengan itu memendekkan saluran paip. Jika cache terlepas, hubungi $this->next->call() untuk memanggil lapisan middleware seterusnya. Apabila proses kembali ke titik ini dari panggilan middleware yang lain, status permintaan cepat diperiksa dan data yang relevan di -cache untuk carian masa depan. Kerana kelas ini memanjangkan kelas Slim Middleware, ia boleh mengakses contoh aplikasi Slim melalui $this->app, dengan itu secara tidak langsung mengakses respons dan objek permintaan. Kita boleh mempengaruhi tajuk tindak balas dengan merawatnya sebagai array dan mempengaruhi badan tindak balas melalui kaedah body(). Kaedah fetch() dan save() dilindungi kaedah penolong, mereka hanya membungkus pertanyaan pangkalan data untuk mencari dan berterusan kandungan. Saya termasuk mereka di sini hanya untuk melengkapkan contoh -contoh. Ia mengandaikan bahawa terdapat jadual bernama cache dengan lajur key, content_type dan body. Bergantung pada keperluan anda, mekanisme kegigihan anda mungkin berbeza -beza. Juga, cache tamat tempoh (untuk kesederhanaan) tidak ditunjukkan di sini, walaupun anda boleh menggabungkannya sendiri.

mendaftar dan konfigurasi middleware

Mendaftar middleware menggunakan kaedah add() Slim.

<?php require_once "../vendor/autoload.php";

$app = new SlimSlim();
$app->add(new MyMiddlewareCache($db));
Salin selepas log masuk

Sudah tentu, pelbagai middleware boleh didaftarkan melalui kaedah panggilan add() berikutnya. Kerana middleware baru akan mengelilingi mana -mana middleware yang ditambah sebelum ini, ini bermakna mereka mesti ditambah dalam urutan yang bertentangan panggilan.

<?php $app = new SlimSlim();
$app->add(new MyMiddlewareCache($db));
$app->add(new MyMiddlewareAuth($db));
// ...
Salin selepas log masuk

Dalam contoh di atas, Cache middleware membungkus aplikasi Slim, dan kemudian Auth middleware membungkus Cache. Apabila $app->run() dipanggil, proses pelaksanaan akan sama dengan yang ditunjukkan dalam angka di atas, pertama memasuki middleware pengesahan dan kemudian bekerja sepanjang jalan ke laluan. Konfigurasi middleware biasanya dilakukan melalui pembina perkhidmatan. Dalam contoh kami, saya hanya lulus sambungan pangkalan data yang aktif supaya ia dapat mengakses jadual cache, tetapi anda boleh menulis kelas anda untuk menerima apa -apa maklumat yang anda perlukan untuk menyesuaikan tingkah lakunya. Sebagai contoh, komponen boleh ditindih untuk menerima objek pengendali yang mendedahkan fetch() dan save() kaedah ini akan membolehkan kami memadamkan kaedah sampel (atau menggunakannya sebagai penandaan lalai) dan pemaju pengguna akhir akan mengikuti keperluan IT Menyediakan fungsi sebagai sebahagian daripada konfigurasi komponen.

Kesimpulan

Saya mendapati bahawa middleware adalah penyelesaian yang elegan untuk melaksanakan semua aspek aplikasi tipis. Dalam artikel ini, saya menerangkan bagaimana seni bina middleware berfungsi dan apa yang diperlukan untuk melaksanakan middleware anda sendiri. Terdapat repositori tambahan kecil dengan beberapa contoh middleware asas seperti perlindungan CSRF dan pengesahan HTTP. Saya telah refactor contoh di sini dan mengemukakan permintaan tarik, jadi jika anda menulis perkhidmatan middleware yang berguna, mengapa tidak mempertimbangkan menyerahkannya kepada projek anda supaya orang lain dapat mendapat manfaat daripadanya juga?

(gambar dari fotolia)

(berikut adalah FAQ, yang telah diselaraskan dan ditambah mengikut kandungan asal, dan beberapa kandungan pendua telah diselaraskan)

Soalan Lazim Mengenai Slim Middleware

  • Apakah middleware yang tipis dan mengapa penting? Slim middleware adalah alat yang berkuasa dalam kerangka tipis yang membolehkan anda memanipulasi permintaan dan respons HTTP. Adalah penting kerana ia menyediakan cara untuk melaksanakan kod sebelum dan selepas permohonan Slim untuk mengubah suai permintaan masuk atau respons keluar. Ini boleh digunakan untuk pelbagai tujuan seperti pengesahan, caching, atau pembalakan.

  • Bagaimana untuk membuat middleware dalam langsing? Mewujudkan middleware dalam Slim melibatkan menentukan kelas yang melaksanakan . Kelas ini harus mempunyai kaedah yang dipanggil MiddlewareInterface yang menerima process() dan ServerRequestInterface. Kaedah RequestHandlerInterface adalah di mana anda boleh memanipulasi permintaan dan respons. process()

  • Bagaimana untuk menambah middleware ke aplikasi langsing saya? anda boleh menggunakan kaedah untuk menambah middleware ke aplikasi Slim anda. Kaedah ini menerima contoh kelas middleware. Middleware dilaksanakan mengikut urutan tambahan, jadi middleware terakhir ditambah akan menjadi middleware pertama untuk dilaksanakan. add()

  • Bolehkah saya menggunakan middleware untuk laluan tertentu dalam langsing? Ya, middleware boleh digunakan untuk laluan tertentu dalam langsing. Ini dilakukan dengan memanggil kaedah pada objek Route dan bukannya objek App. Ini membolehkan anda mempunyai middleware yang hanya memberi kesan kepada laluan tertentu. add()

  • Apakah perbezaan antara middleware global dan middleware penghalaan? Middleware global digunakan untuk setiap permintaan yang diproses oleh aplikasi Slim, sementara middleware routing digunakan untuk hanya laluan tertentu. Ini membolehkan anda menggunakan middleware yang berbeza untuk bahagian yang berlainan aplikasi anda.

  • Bagaimana menggunakan middleware untuk melakukan pengendalian ralat dalam langsing? Dengan menangkap pengecualian dalam kelas middleware, anda boleh menggunakan middleware untuk melakukan pengendalian ralat dalam Slim. Anda kemudian boleh mengubah suai respons untuk memasukkan mesej ralat, atau mengalihkan pengguna ke halaman ralat.

  • Bolehkah anda mengesahkan pengguna dalam Slim menggunakan middleware? Ya, middleware sering digunakan untuk pengesahan dalam Slim. Ini boleh dilakukan dengan menyemak sesi atau token yang sah di middleware dan mengembalikan tindak balas ralat jika pengguna tidak disahkan.

  • Bagaimana menggunakan middleware untuk log masuk Slim? Dengan menulis maklumat mengenai permintaan dan tindak balas kepada fail log, middleware boleh digunakan untuk pembalakan. Ini sangat berguna untuk menyahpepijat atau memantau permohonan anda.

  • Bolehkah saya menggunakan middleware pihak ketiga dengan Slim? Ya, Slim menyokong middleware pihak ketiga. Ini boleh ditambah ke aplikasi anda seperti middleware anda sendiri. Ini membolehkan anda memanfaatkan middleware sedia ada untuk menyelesaikan tugas -tugas yang sama.

  • Bagaimana untuk menguji middleware langsing saya? Menguji middleware langsing melibatkan membuat permintaan dan tindak balas mengejek dan lulus mereka ke middleware anda. Anda kemudian boleh menegaskan bahawa middleware berkelakuan seperti yang diharapkan, seperti mengubah suai permintaan atau tindak balas, atau membuang pengecualian.

Atas ialah kandungan terperinci PHP Master | Bekerja dengan middleware langsing. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1673
14
Tutorial PHP
1278
29
Tutorial C#
1257
24
Terangkan hashing kata laluan yang selamat di PHP (mis., Password_hash, password_verify). Mengapa tidak menggunakan MD5 atau SHA1? Terangkan hashing kata laluan yang selamat di PHP (mis., Password_hash, password_verify). Mengapa tidak menggunakan MD5 atau SHA1? Apr 17, 2025 am 12:06 AM

Dalam php, kata laluan_hash dan kata laluan 1) password_hash menjana hash yang mengandungi nilai garam untuk meningkatkan keselamatan. 2) Kata Laluan_verify Sahkan kata laluan dan pastikan keselamatan dengan membandingkan nilai hash. 3) MD5 dan SHA1 terdedah dan kekurangan nilai garam, dan tidak sesuai untuk keselamatan kata laluan moden.

Bagaimanakah jenis membayangkan jenis PHP, termasuk jenis skalar, jenis pulangan, jenis kesatuan, dan jenis yang boleh dibatalkan? Bagaimanakah jenis membayangkan jenis PHP, termasuk jenis skalar, jenis pulangan, jenis kesatuan, dan jenis yang boleh dibatalkan? Apr 17, 2025 am 12:25 AM

Jenis PHP meminta untuk meningkatkan kualiti kod dan kebolehbacaan. 1) Petua Jenis Skalar: Oleh kerana Php7.0, jenis data asas dibenarkan untuk ditentukan dalam parameter fungsi, seperti INT, Float, dan lain -lain. 2) Return Type Prompt: Pastikan konsistensi jenis nilai pulangan fungsi. 3) Jenis Kesatuan Prompt: Oleh kerana Php8.0, pelbagai jenis dibenarkan untuk ditentukan dalam parameter fungsi atau nilai pulangan. 4) Prompt jenis yang boleh dibatalkan: membolehkan untuk memasukkan nilai null dan mengendalikan fungsi yang boleh mengembalikan nilai null.

PHP dan Python: Paradigma yang berbeza dijelaskan PHP dan Python: Paradigma yang berbeza dijelaskan Apr 18, 2025 am 12:26 AM

PHP terutamanya pengaturcaraan prosedur, tetapi juga menyokong pengaturcaraan berorientasikan objek (OOP); Python menyokong pelbagai paradigma, termasuk pengaturcaraan OOP, fungsional dan prosedur. PHP sesuai untuk pembangunan web, dan Python sesuai untuk pelbagai aplikasi seperti analisis data dan pembelajaran mesin.

Bagaimana anda menghalang suntikan SQL di PHP? (Penyataan yang disediakan, PDO) Bagaimana anda menghalang suntikan SQL di PHP? (Penyataan yang disediakan, PDO) Apr 15, 2025 am 12:15 AM

Menggunakan penyataan preprocessing dan PDO dalam PHP secara berkesan dapat mencegah serangan suntikan SQL. 1) Gunakan PDO untuk menyambung ke pangkalan data dan tetapkan mod ralat. 2) Buat kenyataan pra -proses melalui kaedah menyediakan dan lulus data menggunakan ruang letak dan laksanakan kaedah. 3) Hasil pertanyaan proses dan pastikan keselamatan dan prestasi kod.

PHP dan Python: Contoh dan perbandingan kod PHP dan Python: Contoh dan perbandingan kod Apr 15, 2025 am 12:07 AM

PHP dan Python mempunyai kelebihan dan kekurangan mereka sendiri, dan pilihannya bergantung kepada keperluan projek dan keutamaan peribadi. 1.PHP sesuai untuk pembangunan pesat dan penyelenggaraan aplikasi web berskala besar. 2. Python menguasai bidang sains data dan pembelajaran mesin.

PHP: Pengendalian pangkalan data dan logik sisi pelayan PHP: Pengendalian pangkalan data dan logik sisi pelayan Apr 15, 2025 am 12:15 AM

PHP menggunakan sambungan MySQLI dan PDO untuk berinteraksi dalam operasi pangkalan data dan pemprosesan logik sisi pelayan, dan memproses logik sisi pelayan melalui fungsi seperti pengurusan sesi. 1) Gunakan MySQLI atau PDO untuk menyambung ke pangkalan data dan laksanakan pertanyaan SQL. 2) Mengendalikan permintaan HTTP dan status pengguna melalui pengurusan sesi dan fungsi lain. 3) Gunakan urus niaga untuk memastikan atomik operasi pangkalan data. 4) Mencegah suntikan SQL, gunakan pengendalian pengecualian dan sambungan penutup untuk debugging. 5) Mengoptimumkan prestasi melalui pengindeksan dan cache, tulis kod yang sangat mudah dibaca dan lakukan pengendalian ralat.

Tujuan PHP: Membina Laman Web Dinamik Tujuan PHP: Membina Laman Web Dinamik Apr 15, 2025 am 12:18 AM

PHP digunakan untuk membina laman web dinamik, dan fungsi terasnya termasuk: 1. Menjana kandungan dinamik dan menghasilkan laman web secara real time dengan menyambung dengan pangkalan data; 2. Proses Interaksi Pengguna dan Penyerahan Bentuk, Sahkan Input dan Menanggapi Operasi; 3. Menguruskan sesi dan pengesahan pengguna untuk memberikan pengalaman yang diperibadikan; 4. Mengoptimumkan prestasi dan ikuti amalan terbaik untuk meningkatkan kecekapan dan keselamatan laman web.

Memilih antara php dan python: panduan Memilih antara php dan python: panduan Apr 18, 2025 am 12:24 AM

PHP sesuai untuk pembangunan web dan prototaip pesat, dan Python sesuai untuk sains data dan pembelajaran mesin. 1.Php digunakan untuk pembangunan web dinamik, dengan sintaks mudah dan sesuai untuk pembangunan pesat. 2. Python mempunyai sintaks ringkas, sesuai untuk pelbagai bidang, dan mempunyai ekosistem perpustakaan yang kuat.

See all articles