Middleware dalam Lithe: Cara Ia Berfungsi dan Cara Mencipta Sendiri

DDD
Lepaskan: 2024-10-25 03:28:29
asal
520 orang telah melayarinya

Middleware in Lithe: How It Works and How to Create Your Own

Middleware menyediakan mekanisme yang mudah untuk memeriksa dan menapis permintaan HTTP yang memasuki aplikasi anda. Contohnya, Lithe termasuk middleware yang menyemak sama ada pengguna disahkan. Jika tidak, perisian tengah akan mengubah hala pengguna ke skrin log masuk. Jika pengguna disahkan, middleware membenarkan permintaan diteruskan.

Bagaimana Middleware Berfungsi dalam Lithe

Dalam Lithe, middleware ialah fungsi dengan akses kepada objek permintaan ($req), objek respons ($res), dan fungsi $next dalam kitaran permintaan-tindak balas aplikasi. Fungsi $next, apabila dipanggil, memanggil middleware seterusnya dalam tindanan semasa.

Fungsi perisian tengah menyediakan cara yang mudah untuk memeriksa, menapis dan memanipulasi permintaan HTTP masuk ke aplikasi anda. Mereka boleh:

  • Laksanakan sebarang kod.
  • Ubah suai permintaan dan objek respons.
  • Tamatkan kitaran permintaan-tindak balas.
  • Panggil perisian tengah seterusnya dalam tindanan.

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


Elemen Fungsi Middleware

Kod berikut menunjukkan unsur-unsur fungsi middleware:

$app->use(function ($req, $res, $next) {
    $next();
});
Salin selepas log masuk
Salin selepas log masuk

Di mana:

  • $req: Hujah permintaan HTTP, secara konvensional dipanggil $req.
  • $res: Hujah respons HTTP, secara konvensional dipanggil $res.
  • $next: Argumen panggil balik, biasa dipanggil $next.

Mentakrifkan Middleware

Berikut ialah contoh ringkas perisian tengah yang dipanggil myLogger. Perisian tengah ini mencetak mesej DILOG setiap kali permintaan melaluinya. Ia ditakrifkan sebagai fungsi yang diberikan kepada pembolehubah yang dipanggil myLogger:

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

Perhatikan panggilan $next() di atas. Fungsi ini memanggil middleware seterusnya dalam aplikasi. $next() bukan fungsi PHP atau Lithe terbina dalam tetapi merupakan hujah ketiga yang dihantar kepada fungsi middleware. Walaupun $next() boleh dinamakan apa-apa, mengikut konvensyen, ia sentiasa dipanggil "seterusnya." Untuk mengelakkan kekeliruan, ikuti konvensyen ini.

Bayangkan perisian tengah sebagai satu siri "lapisan" yang dilalui oleh permintaan HTTP sebelum mencapai aplikasi anda. Setiap lapisan boleh memeriksa atau menolak permintaan.


Memuatkan Middleware

Untuk memuatkan perisian tengah, anda memanggil kaedah use() kelas LitheApp, menyatakan fungsi perisian tengah. Contohnya:

$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!');
});
Salin selepas log masuk
Salin selepas log masuk

Apabila apl menerima permintaan, mesej "LOGGED" akan dicetak. Urutan pemuatan perisian tengah adalah penting: yang dimuatkan dahulu dilaksanakan dahulu.

Middleware myLogger hanya mencetak mesej, kemudian menghantar permintaan ke middleware seterusnya menggunakan $next().


Menggunakan Middleware

Aplikasi Lithe boleh menggunakan jenis middleware berikut:

  • Perisian Tengah peringkat aplikasi
  • Perisian Tengah peringkat penghala
  • Perisian Tengah pihak ketiga

Middleware peringkat aplikasi

Anda melampirkan perisian tengah peringkat aplikasi pada contoh aplikasi menggunakan kaedah use() atau METHOD(), dengan METHOD merujuk kepada kaedah HTTP (cth., GET, PUT, POST) dalam huruf kecil.

Contoh ini menunjukkan perisian tengah tanpa laluan. Perisian tengah berjalan setiap kali permintaan diterima:

$app->use(function ($req, $res, $next) {
    $next();
});
Salin selepas log masuk
Salin selepas log masuk

Dalam contoh di bawah, middleware mengendalikan permintaan GET ke laluan /user/:id:

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

Middleware peringkat penghala

Perisian tengah peringkat penghala berfungsi seperti perisian perantara peringkat aplikasi tetapi dilampirkan pada tika LitheHttpRouter:

$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!');
});
Salin selepas log masuk
Salin selepas log masuk

Anda memuatkan middleware peringkat penghala menggunakan fungsi use() dan METHOD().

Berikut ialah contoh perisian tengah peringkat penghala:

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

Middleware pihak ketiga

Anda boleh menggunakan perisian tengah pihak ketiga untuk menambah kefungsian pada aplikasi Lithe anda. Pasang modul PHP yang diperlukan dan kemudian muatkannya pada peringkat aplikasi atau penghala.

Berikut ialah contoh perisian tengah sesi memuatkan dengan LitheMiddlewareSessionsession:

$app->get('/user/:id', function ($req, $res, $next) {
    if ($req->param('id') === '0') {
        return $next();
    } 
    $res->send('ID is not 0');
}, function ($req, $res) {
    $res->send('regular');
});
Salin selepas log masuk

Untuk senarai perisian tengah pihak ketiga yang biasa digunakan dengan Lithe, semak sumber Perisian Tengah pihak ketiga.


Middleware boleh dikonfigurasikan

Jika anda memerlukan perisian tengah anda boleh dikonfigurasikan, anda boleh mencipta fungsi yang menerima tatasusunan pilihan atau parameter lain dan kemudian mengembalikan pelaksanaan perisian tengah berdasarkan parameter tersebut. Lihat contoh di bawah:

$router = new \Lithe\Http\Router;
Salin selepas log masuk

Kini, anda boleh menggunakan perisian tengah dengan konfigurasi tersuai:

$router = new \Lithe\Http\Router;

$router->use(function ($req, $res, $next) {
    echo 'Time: ', Date('H:i:s'), '<br>';
    $next();
});

$router->get('/user/:id', function ($req, $res, $next) {
    if ($req->param('id') === '0') {
        $res->redirect('/');
    }
    $next();
}, function ($req, $res) {
    echo $req->param('id');
    $res->render('special');
});

$app->use('/api', $router);
Salin selepas log masuk

Untuk mencipta middleware yang boleh dipasang oleh pembangun lain melalui Composer, terdapat pakej yang dipanggil lithemod/flow. Ia menyediakan antara muka dan utiliti untuk mengendalikan permintaan dan tindak balas HTTP dalam Lithe, yang memudahkan penciptaan middleware terpiawai dan sedia untuk digunakan merentas pelbagai aplikasi.

lithemod/flow membantu membina middleware yang mantap dengan menyediakan antara muka bersatu untuk Permintaan dan Respons, menjadikan pembangunan lebih cekap dan teratur. Ini memudahkan penyepaduan perisian tengah anda ke dalam projek lain dan memastikan kod itu mengikut piawaian yang konsisten.

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!

sumber:dev.to
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan