Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Middleware dalam Lithe: Cara Ia Berfungsi dan Cara Mencipta Sendiri

Middleware dalam Lithe: Cara Ia Berfungsi dan Cara Mencipta Sendiri

DDD
DDDasal
2024-10-25 08:33:28534semak imbas

Middleware no Lithe: Como Funciona e Como Criar o Seu Próprio

Perisian tengah menyediakan mekanisme yang mudah untuk memeriksa dan menapis permintaan HTTP yang masuk ke dalam aplikasi anda. Sebagai contoh, Lithe termasuk perisian tengah yang menyemak sama ada pengguna aplikasi anda disahkan. Jika pengguna tidak disahkan, middleware akan mengubah hala pengguna ke skrin log masuk aplikasi anda. Walau bagaimanapun, jika pengguna disahkan, perisian tengah akan membenarkan permintaan diteruskan dalam aplikasi.


Cara perisian tengah berfungsi dalam Lithe

Dalam Lithe, Middleware ialah fungsi yang mempunyai akses kepada objek permintaan ($req), objek respons ($res) dan fungsi $next dalam gelung permintaan-tindak balas aplikasi. Fungsi $next ialah fungsi dalam penghala Lithe yang, apabila dipanggil, melaksanakan middleware di sebelah middleware semasa.

Fungsi perisian tengah menyediakan mekanisme yang mudah untuk memeriksa, menapis dan mengendalikan permintaan HTTP yang memasuki aplikasi anda.

Fungsi perisian tengah boleh melaksanakan tugas berikut:

  • Jalankan sebarang kod.
  • Buat perubahan pada objek permintaan dan respons.
  • Tamatkan kitaran permintaan-tindak balas.
  • Panggil perisian tengah seterusnya dalam tindanan.

Jika fungsi middleware semasa tidak menamatkan kitaran permintaan-tindak balas, ia mesti memanggil $next() untuk menghantar kawalan ke fungsi middleware seterusnya. Jika tidak, permintaan akan belum selesai.


Elemen Fungsi Middleware

Kod berikut menunjukkan elemen panggilan fungsi middleware:

$app->use(function ($req, $res, $next) {
    $next();
});

Di mana:
- $req: Hujah permintaan HTTP untuk fungsi middleware, dipanggil "$req" mengikut konvensyen.
- $res: Hujah respons HTTP untuk fungsi middleware, dipanggil "$res" mengikut konvensyen.
- $next: Argumen panggil balik untuk fungsi middleware, dipanggil "$next" oleh konvensyen.


Mentakrifkan Middleware

Mari kita mulakan dengan contoh middleware ringkas yang dipanggil myLogger. Perisian tengah ini mencetak mesej DILOG setiap kali permintaan melaluinya. Middleware ditakrifkan sebagai fungsi yang diberikan kepada pembolehubah yang dipanggil myLogger:

$myLogger = function ($req, $res, $next) {
  echo 'LOGGED';
  $next();
};

Perhatikan panggilan ke $next() di atas. Memanggil fungsi ini memanggil fungsi middleware seterusnya dalam aplikasi. Fungsi $next() bukan sebahagian daripada PHP atau Lithe, tetapi ia adalah hujah ketiga yang dihantar kepada fungsi middleware. Fungsi $next() boleh mempunyai sebarang nama, tetapi mengikut konvensyen ia sentiasa dipanggil "next". Untuk mengelakkan kekeliruan, sentiasa gunakan konvensyen ini.

Adalah yang terbaik untuk menganggap perisian tengah sebagai satu siri "lapisan" yang mesti dilalui oleh permintaan HTTP sebelum mencapai aplikasi anda. Setiap lapisan boleh memeriksa permintaan malah menolaknya sepenuhnya.


Memuatkan Middleware

Untuk memuatkan fungsi middleware, anda boleh memanggil kaedah use() kelas LitheApp, menyatakan fungsi middleware yang diingini. Sebagai contoh, kod berikut memuatkan fungsi middleware myLogger sebelum melaksanakan laluan ke laluan akar (/):

$app->use(function ($req, $res, $next) {
    $next();
});

Setiap kali aplikasi menerima permintaan, ia mencetak mesej "LOGGED".

Tertib pemuatan middleware adalah penting: fungsi middleware yang dimuatkan dahulu juga dilaksanakan terlebih dahulu.

Fungsi middleware myLogger hanya mencetak mesej dan kemudian menghantar permintaan ke fungsi middleware seterusnya pada tindanan dengan memanggil fungsi $next().


Menggunakan Middleware

Aplikasi Lithe boleh menggunakan jenis middleware berikut:

  • Perisian tengah peringkat aplikasi
  • Perisian tengah gred penghala
  • Perisian tengah pihak ketiga

Perisian tengah peringkat aplikasi

Ikat perisian tengah peringkat aplikasi kepada contoh objek aplikasi menggunakan kaedah use() dan METHOD(), dengan METHOD ialah kaedah HTTP permintaan yang dikendalikan oleh fungsi middleware (seperti GET, PUT atau POST) dalam huruf kecil.

Contoh ini menunjukkan fungsi perisian tengah tanpa laluan pemasangan. Fungsi ini dilaksanakan setiap kali aplikasi menerima permintaan.

$myLogger = function ($req, $res, $next) {
  echo 'LOGGED';
  $next();
};

Contoh di bawah menunjukkan perisian tengah yang mengendalikan permintaan GET dalam laluan /user/:id.

$app = new \Lithe\App;

$myLogger = function ($req, $res, $next) {
    echo 'LOGGED';
    $next();
};

$app->use($myLogger);

$app->get('/', function ($req, $res, $next) {
    $res->send('Hello World!');
});

Perisian tengah peringkat penghala

Perisian tengah peringkat penghala berfungsi dengan cara yang sama seperti perisian perantara peringkat aplikasi, kecuali ia terikat dengan tika LitheHttpRouter.

$app->use(function ($req, $res, $next) {
    echo 'Hello World!';
    $next();
});

Muat perisian tengah peringkat penghala menggunakan fungsi USE dan METHOD.

Kod contoh berikut menunjukkan sistem middleware menggunakan middleware peringkat penghala:

$app->get('/user/:id', function ($req, $res, $next) {
    // Se o ID do usuário for '0', passa para o próximo middleware
    if ($req->param('id') === '0') {
        return $next();
    } 

    // Caso contrário, envia uma resposta específica
    $res->send('ID não é 0');
}, function ($req, $res) {
    // Envia uma resposta quando o ID for '0'
    $res->send('regular');
});

Perisian tengah pihak ketiga

Gunakan perisian tengah pihak ketiga untuk menambah kefungsian pada apl Lithe.

Pasang modul PHP yang diperlukan untuk fungsi yang diingini dan kemudian muatkannya ke dalam aplikasi anda pada peringkat aplikasi atau pada peringkat penghala.

Contoh berikut menggambarkan memuatkan perisian tengah sesi, fungsi LitheMiddlewareSessionsession.

$router = new \Lithe\Http\Router;

Untuk senarai separa fungsi middleware pihak ketiga yang biasa digunakan dengan Lithe, lihat: Third-Party Middleware.

Perisian tengah boleh dikonfigurasikan

Jika anda memerlukan perisian tengah anda boleh dikonfigurasikan, buat fungsi yang menerima tatasusunan pilihan atau parameter lain, kemudian kembalikan pelaksanaan perisian tengah berdasarkan parameter input.

$app->use(function ($req, $res, $next) {
    $next();
});

Kini middleware boleh digunakan seperti yang ditunjukkan di bawah.

$myLogger = function ($req, $res, $next) {
  echo 'LOGGED';
  $next();
};

Atas ialah kandungan terperinci Middleware dalam Lithe: Cara Ia Berfungsi dan Cara Mencipta Sendiri. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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