4. Controller middleware (ok)

https://viblo.asia/p/tap-14-controller-laravel-Ljy5VXOkZra

Thông thường khi đăng ký middleware trong file route, ta làm như sau:

Route::get('profile', 'UserController@show')->middleware('auth');

Tuy nhiên sẽ thuận tiện hơn khi bạn đăng ký middleware trong hàm khởi tạo của controller. Sử dụng phương thức middleware trong __construct của class controller để đăng ký.

class UserController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }
}

Laravel cung cấp cho chúng ta hai method exceptonly để mở rộng tính linh hoạt cho controller middleware.

Với method except thì middleware đã đăng ký ở trước sẽ áp dụng trên tất cả các method có trong controller đó "ngoại trừ" method đã tham chiếu trong except.

class UserController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth')->except('logout');
    }
}

Trong trường này tất cả các method có trong UserController đều được đăng ký middleware auth ngoại trừ logout.

Còn với method only thì nó sẽ "chỉ" áp dụng lên method mà ta đã tham chiếu.

class UserController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth')->only('show');
    }
}

Trong trường này chỉ có method show trong UserController được đăng ký middleware auth.

Ngoài ra, bạn có thể tự định nghĩa một middleware trong controller với dạng Closure object.

$this->middleware(function ($request, $next) {
    // ...

    return $next($request);
});

Với cách này giúp chúng ta code nhanh chóng khi cần xử lý một số logic nhỏ.

Lưu ý: Trong trường hợp có quá nhiều nhóm method được đăng ký các middleware khác nhau trong một controller thì bạn nên nghĩ đến việc phân chia controller đó thành nhiều controller nhỏ để dễ quản lý. Không nên xử lý logic quá nhiều để đăng ký middleware trong hàm khởi tạo của controller class.

Last updated