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!

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)

Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Apr 05, 2025 am 12:04 AM

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Bagaimanakah sesi merampas kerja dan bagaimana anda dapat mengurangkannya dalam PHP? Bagaimanakah sesi merampas kerja dan bagaimana anda dapat mengurangkannya dalam PHP? Apr 06, 2025 am 12:02 AM

Sesi rampasan boleh dicapai melalui langkah -langkah berikut: 1. Dapatkan ID Sesi, 2. Gunakan ID Sesi, 3. Simpan sesi aktif. Kaedah untuk mengelakkan rampasan sesi dalam PHP termasuk: 1. Gunakan fungsi Sesi_Regenerate_ID () untuk menjana semula ID Sesi, 2. Data sesi stor melalui pangkalan data, 3.

Huraikan prinsip -prinsip yang kukuh dan bagaimana ia memohon kepada pembangunan PHP. Huraikan prinsip -prinsip yang kukuh dan bagaimana ia memohon kepada pembangunan PHP. Apr 03, 2025 am 12:04 AM

Penerapan prinsip pepejal dalam pembangunan PHP termasuk: 1. Prinsip Tanggungjawab Tunggal (SRP): Setiap kelas bertanggungjawab untuk hanya satu fungsi. 2. Prinsip Terbuka dan Tutup (OCP): Perubahan dicapai melalui lanjutan dan bukannya pengubahsuaian. 3. Prinsip Penggantian Lisch (LSP): Subkelas boleh menggantikan kelas asas tanpa menjejaskan ketepatan program. 4. Prinsip Pengasingan Antara Muka (ISP): Gunakan antara muka halus untuk mengelakkan kebergantungan dan kaedah yang tidak digunakan. 5. Prinsip Inversi Ketergantungan (DIP): Modul peringkat tinggi dan rendah bergantung kepada abstraksi dan dilaksanakan melalui suntikan ketergantungan.

Bagaimana cara debug mod CLI dalam phpstorm? Bagaimana cara debug mod CLI dalam phpstorm? Apr 01, 2025 pm 02:57 PM

Bagaimana cara debug mod CLI dalam phpstorm? Semasa membangun dengan PHPStorm, kadang -kadang kita perlu debug PHP dalam mod Interface Line Command (CLI) ...

Ciri -ciri Keselamatan Rangka Kerja: Melindungi Kelemahan. Ciri -ciri Keselamatan Rangka Kerja: Melindungi Kelemahan. Mar 28, 2025 pm 05:11 PM

Artikel membincangkan ciri -ciri keselamatan penting dalam rangka kerja untuk melindungi daripada kelemahan, termasuk pengesahan input, pengesahan, dan kemas kini tetap.

Bagaimana cara menetapkan kebenaran secara automatik UnixSocket selepas sistem dimulakan semula? Bagaimana cara menetapkan kebenaran secara automatik UnixSocket selepas sistem dimulakan semula? Mar 31, 2025 pm 11:54 PM

Bagaimana untuk menetapkan keizinan UnixSocket secara automatik selepas sistem dimulakan semula. Setiap kali sistem dimulakan semula, kita perlu melaksanakan perintah berikut untuk mengubahsuai keizinan UnixSocket: sudo ...

Terangkan pengikatan statik lewat dalam php (statik: :). Terangkan pengikatan statik lewat dalam php (statik: :). Apr 03, 2025 am 12:04 AM

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

See all articles