Perisian tengah ialah konsep penting dalam pembangunan web moden dan Laravel, rangka kerja PHP yang popular, menggunakannya secara meluas untuk mengendalikan permintaan HTTP. Sama ada anda sedang membina API ringkas atau aplikasi web berskala besar, memahami perisian tengah dalam Laravel adalah kunci untuk menulis kod yang lebih bersih, lebih terurus dan cekap.
Dalam artikel ini, kami akan menyelam jauh ke dalam perisian tengah Laravel, menerangkan apa itu, sebab anda perlu menggunakannya dan cara menggunakannya dengan berkesan. Kami juga akan melihat struktur middleware dalam Laravel 11, yang telah melihat perubahan ketara, termasuk mengalih keluar Kernel HTTP. Kami akan membuat kesimpulan dengan menelusuri penciptaan dan penggunaan perisian tengah tersuai dalam Laravel.
Perisian tengah pada asasnya ialah penapis atau lapisan yang terletak di antara permintaan HTTP masuk dan aplikasi anda. Ia memintas permintaan masuk dan boleh melakukan pelbagai tugas, seperti pengesahan, pengelogan dan pengubahsuaian permintaan, sebelum menghantar permintaan ke lapisan seterusnya. Selepas pemprosesan, middleware boleh membenarkan permintaan untuk meneruskan ke aplikasi, mengubah suai respons atau menolak permintaan itu secara langsung.
Dalam istilah yang lebih mudah, perisian tengah adalah seperti pintu keselamatan atau pengawal untuk aplikasi anda. Setiap permintaan kepada aplikasi anda mesti melalui perisian tengah dan anda boleh menentukan gelagat berbeza berdasarkan jenis permintaan.
Middleware menyediakan mekanisme yang mudah untuk menapis atau mengubah suai permintaan HTTP yang memasuki aplikasi anda. Berikut ialah beberapa sebab biasa mengapa middleware digunakan dalam aplikasi Laravel:
Pengesahan dan Kebenaran: Middleware boleh memastikan bahawa hanya pengguna yang disahkan atau pengguna dengan kebenaran tertentu mengakses laluan tertentu.
Mod Penyelenggaraan: Middleware boleh menyemak sama ada aplikasi berada dalam mod penyelenggaraan dan mengembalikan mesej penyelenggaraan untuk semua permintaan masuk.
Pengelogan dan Pemantauan: Middleware boleh log setiap permintaan atau memantau prestasi, membantu pembangun menjejak prestasi aplikasi.
CORS (Cross-Origin Resource Sharing): Middleware boleh mengendalikan pengepala CORS, membenarkan atau menolak permintaan daripada asal luar.
Minta Pengubahsuaian: Anda mungkin mahu mengubah suai data permintaan sebelum ia sampai kepada pengawal anda, seperti memotong rentetan input atau membersihkan input.
Dengan menggunakan perisian tengah, anda memastikan logik aplikasi anda bersih dan dipisahkan daripada kebimbangan silang, seperti keselamatan, pengelogan atau pengubahsuaian permintaan.
Dalam Laravel, middleware secara amnya boleh dikategorikan kepada tiga jenis:
Perisian Tengah Global
Perisian tengah global digunakan pada setiap permintaan HTTP yang masuk ke dalam aplikasi anda. Ia ditakrifkan sekali dan digunakan secara automatik pada semua laluan. Contohnya, anda mungkin mahu mendayakan pengelogan untuk setiap permintaan yang dibuat kepada aplikasi.
Perisian Tengah Khusus Laluan
Perisian tengah jenis ini digunakan hanya pada laluan atau kumpulan laluan tertentu. Anda boleh melampirkannya pada laluan individu atau sekumpulan laluan yang berkongsi tingkah laku yang serupa. Contohnya, anda boleh menggunakan perisian tengah pengesahan hanya pada laluan yang memerlukan pengguna log masuk.
Kumpulan Pertengahan
Kumpulan perisian tengah membolehkan anda menentukan berbilang perisian tengah yang boleh digunakan bersama sebagai satu kumpulan. Laravel dihantar dengan beberapa kumpulan middleware lalai, seperti kumpulan web dan api. Kumpulan ini menggabungkan perisian tengah yang harus digunakan pada semua permintaan web atau API, masing-masing.
Perisian tengah menawarkan beberapa faedah untuk pembangun Laravel:
1. Pemisahan Kebimbangan
Middleware membantu dalam memisahkan kebimbangan dengan mengasingkan logik khusus daripada aliran aplikasi utama. Ini memudahkan untuk menyelenggara dan melanjutkan permohonan anda kerana tanggungjawab aplikasi dibahagikan kepada lapisan yang berbeza.
2. Kebolehgunaan semula
Setelah ditakrifkan, perisian tengah boleh digunakan semula merentasi pelbagai laluan dan aplikasi. Ini memastikan anda menulis logik perisian tengah sekali sahaja dan menggunakannya di mana-mana yang perlu.
3. Keselamatan
Middleware membolehkan anda melaksanakan logik berkaitan keselamatan, seperti pengesahan dan kebenaran, pada titik masuk aplikasi anda, memastikan permintaan yang tidak dibenarkan tidak pernah mencapai logik teras anda.
4. Penyesuaian
Perisian tengah Laravel adalah fleksibel dan boleh disesuaikan. Anda boleh membuat perisian tengah yang mengubah suai permintaan, mengubah hala pengguna berdasarkan syarat tertentu atau memanipulasi respons sebelum ia dikembalikan kepada klien.
5. Pengendalian Ralat Berpusat
Middleware membolehkan anda mengurus ralat dan pengecualian secara terpusat. Anda boleh menangkap pengecualian atau ralat pengesahan dan mengendalikannya secara seragam merentas aplikasi anda.
Dengan Laravel 11, terdapat beberapa perubahan struktur penting, terutamanya dalam cara perisian tengah dikendalikan. Sebelum Laravel 11, semua konfigurasi middleware telah dikendalikan dalam fail Kernel Http (app/Http/Kernel.php). Walau bagaimanapun, Laravel 11 memperkenalkan pendekatan yang lebih bersih dan modular.
Penyingkiran Kernel Http
Dalam Laravel 11, Kernel Http telah dialih keluar dan perisian tengah kini dikonfigurasikan dalam fail bootstrap/app.php. Ini mungkin terasa seperti anjakan paradigma yang ketara bagi pembangun yang biasa dengan struktur Kernel Http tradisional, tetapi ia membolehkan cara yang lebih diperkemas dan fleksibel untuk mendaftar dan mengurus perisian tengah.
Begini rupa fail bootstrap/app.php lalai dalam Laravel 11:
<?php return Application::configure() ->withProviders() ->withRouting( web: __DIR__.'/../routes/web.php', // api: __DIR__.'/../routes/api.php', commands: __DIR__.'/../routes/console.php', // channels: __DIR__.'/../routes/channels.php', ) ->withMiddleware(function (Middleware $middleware) { // }) ->withExceptions(function (Exceptions $exceptions) { // })->create(); ?>``` **Middleware Management** In Laravel 11, middleware is now handled through the withMiddleware() method, which accepts a callable function. Inside this callable, you can register, modify, or remove middleware. ## 6. How to Create and Use Custom Middleware in Laravel Creating custom middleware in Laravel allows you to extend the default behavior of your application. Here’s how to create and use custom middleware in Laravel: Step 1: Create the Middleware You can create middleware using the Artisan command: php artisan make:middleware CheckAge This command will create a new middleware class in the app/Http/Middleware directory. The newly created CheckAge.php file will look something like this: ```php <?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; class CheckAge { /** * Handle an incoming request. */ public function handle(Request $request, Closure $next) { if ($request->age <= 18) { return redirect('home'); } return $next($request); } }?>``` In this example, the CheckAge middleware checks the user's age and redirects them if they are under 18. If the user passes the condition, the request continues to the next layer. **Step 2: Register the Middleware** Since Laravel 11 no longer uses the Http Kernel, you will need to register your middleware in the bootstrap/app.php file. Here’s how you can register your custom middleware: ```php return Application::configure() ->withProviders() ->withRouting( web: __DIR__.'/../routes/web.php', ) ->withMiddleware(function (Middleware $middleware) { $middleware->alias('check.age', \App\Http\Middleware\CheckAge::class); }) ->create();``` Now, your middleware alias check.age is available for use in your routes. Step 3: Apply the Middleware to Routes Once the middleware is registered, you can apply it to routes or route groups: ```php <?php Route::get('/dashboard', function () { // Only accessible if age > 18 })->middleware('check.age');?>``` ## 7. Practical Examples of Using Middleware Middleware can be used for a variety of tasks in Laravel. Let’s look at a few practical use cases. **Example 1: Logging Requests** You can create middleware to log incoming requests to a file or a logging service. This can help you monitor the behavior of your application. ```php <?php namespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\Log; use Illuminate\Http\Request; class LogRequest { public function handle(Request $request, Closure $next) { Log::info('Request URL: ' . $request->url()); return $next($request); } }?>``` **Example 2: Checking User Roles** You can use middleware to restrict access based on user roles. For example, only allow access to certain routes if the user has an admin role. ```php <?php namespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\Auth; class CheckRole { public function handle($request, Closure $next) { if (Auth::user() && Auth::user()->role != 'admin') { return redirect('/home'); } return $next($request); } }?>``` ## 8. Best Practices for Middleware in Laravel Here are some best practices to follow when working with middleware in Laravel: **1. Keep Middleware Focused** Middleware should be responsible for a single task. If you find that your middleware is doing too much, consider splitting it into smaller, more focused middleware. **2. Use Route-Specific Middleware** Use route-specific middleware when possible. Applying middleware globally can lead to performance overhead and unnecessary checks on routes that don’t need them. **3. Avoid Complex Logic** Middleware should be kept simple. Complex logic or business rules should be handled in the controller
Atas ialah kandungan terperinci Memahami Laravel Middleware: Menyelam Mendalam ke dalam Pendekatan Baharu Laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!