Laravel 5: Middleware và custom Middleware
Chào các bạn,
Mình sẽ giới thiệu cho các bạn về phần Middleware của Laravel nhé 😀
Đây là một trong những tính năng hay trong Laravel hỗ trợ ta cũng rất nhiều việc.
1/ Giới thiệu về Middleware
Middleware là gì? Middleware hỗ trợ ta filtering HTTP requests trước khi truy cập vào 1 trang.
Ví dụ: ta muốn khi chưa đăng nhập, không thể nào ta có thể truy cập vào /home, nó sẽ tự redirect qua /login.
Nếu theo cách thông thường, ta sẽ check Auth::check() để kiểm tra đăng nhập hay chưa, chưa thì redirect.
Và theo cách truyền thống này thì khá lâu, vậy nên ta đã có middleware để xử lý vụ này 😀
Nếu ta sử dụng Authentication của Laravel, ta sẽ có sẵn 2 middleware là guest và auth. Với mỗi controller/action có chứa middleware auth, phải cần đăng nhập mới có thể truy cập, guest sẽ không cần dăng nhập.
Dễ hiểu nhất là: kiểm tra điều kiện gì đó để coi có được truy cập page này hay không. (Đối với ASP.NET, ta có thể dùng Filter (ActionFilterAttribute).
2/ Middleware có sẵn
Như mình đã giới thiệu, nếu ta dùng Authentication của Laravel thì ta sẽ có 2 middleware như sau:
- auth ( đã đăng nhập)
- guest ( ko đăng nhập)
Ta có thể gán middleware theo 2 cách này:
Tại controller:
Tạo ra hàm khởi tạo (__construct) và set middleware:
class HomeController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
}
Nếu ta đặt ở hàm khởi tạo, toàn bộ phương thức ở controller này để truy cập được thì phải đăng nhập 😀
Ta cũng có thể đặt hàm middleware này tại các phương thức riêng nếu muốn.
Tại routes:
Rất đơn giản, ta sẽ set middleware như sau:
// cơ bản
Route::get('/', 'HomeController@index')->name('home')->middleware('auth');
// cách 2
Route::get('/', ['as' => 'home', 'uses' => 'HomeController@index', 'middleware' => 'auth']);
// cách 3 - multiple middleware
Route::get('/', ['as' => 'home', 'uses' => 'HomeController@index', 'middleware' => ['auth', 'auth.basic']]);
3/ Custom middleware
Ví dụ, users mình cần phải đăng nhập là 1, admin hay user thường là 2. Vậy mình cần tận 2 middleware.
Trong đó middleware thường mình dùng auth có sẵn, còn middleware kiểm tra admin thì mình sẽ tạo ra mới.
Lưu ý: mình phân biệt admin với user thường thông qua cột type của table users nhé. 0 => Admin, còn lại là bt.
Bước 1: Để tạo ra được 1 middleware, ta dùng lệnh sau:
php artisan make:middleware Admin
Khi chạy xong, 1 file middleware sẽ được tạo ra tại app\Http\Middleware
Bước 2: Mình sẽ mở file middleware vừa dc tạo ra và chỉnh sửa như sau:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class Admin {
public function handle($request, Closure $next)
{
if ( Auth::check() && Auth::user()->isAdmin() )
{
return $next($request);
}
return redirect('/');
}
}
Bước 3: mình sẽ viết ra hàm isAdmin ở model User
public function isAdmin()
{
return $this->type == 0;
}
Nếu type == 0 => true, còn lại thì là users bình thường 😀
Bước 4: khai báo middleware, ta mở file app/Http/Kernel.php
Kéo xuống cuối cùng sẽ có biến này:
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
// khai báo middleware custom
'admin' => \App\Http\Middleware\Admin::class,
];
Các bạn chỉ việc khai báo class của các bạn tương tự như các lines trên và đặt cho nó cái tên thôi 😀
Xong bước 4, ta đã có thể sử dụng middleware với tên là “admin” được rồi 😀
Bạn có thể khai báo middleware tại routes hoặc controller tùy ý 😀
Mình xin kết thúc bài “Laravel 5: Middleware và custom Middleware” tại đây nhé 😀
(Hướng dẫn trên Laravel 5.5, các laravel 5.x tương tự :D)
Cám ơn các bạn quan tâm đã theo dõi 😀
Laravel 5: Middleware và custom Middleware
One thought on “Laravel 5: Middleware và custom Middleware”
Comments are closed.