Yêu cầu thg 12 22, 2020 10:15 SA 173 0 5
  • 173 0 5
+2

Anh chị cho em hỏi chút về sử dụng Middleware trong Laravel với ạ.

Chia sẻ
  • 173 0 5

Em đang có 1 ParentClass có contruct như sau:

class Parent extends Controller{
    construct() {
        $this->middleware('auth');
    }
}

Và 1 child class như sau:

class Child extends Parent{
    construct() {
        parent::__construct();
        $this->middleware('auth')->except('index');
    }
    
    function index(){}
    .....
}

Em đang muốn sau khi class Child extend construct của Parrent, và nó có thể except function index ạ.
Middle cói thể dùng ở route luôn, nhưng e đang muốn dùng như thế này cho gọn ạ.
Mong mọi người giúp đỡ xem có cách nào k0 ạ.
Em cảm ơn.

5 CÂU TRẢ LỜI


Đã trả lời thg 12 22, 2020 2:37 CH
+2

Thật ra cách làm của bạn mới là cách làm dở, bạn nên tạo một middleware riêng cho từng group route rồi route nào trỏ đến function nào không cần middleware thì bạn nhóm nó vào function khác, không phải ngẫu nhiên mà Laravel sinh ra kiến trúc như vậy

Chia sẻ
Avatar Ngân Kim @ngankim
thg 12 23, 2020 10:40 SA

Thank bạn đã comment. Thực ra mình cũng đang áp dụng kiến trúc bạn nói là gán middleware cho group rồi.
Tuy nhiên có 1 nhóm các controller mình nghĩ nếu thực hiện đc như bên trên thì nó hay hơn.
Nên mới đưa ra câu hỏi đó thui.
Còn nếu ko có cách thì lại cách cũ thui. hihi

Đã trả lời thg 12 28, 2020 9:00 SA
0

Bạn tách riêng middleware ra cho từng group rồi có thể lồng trong route. Mình nghĩ như này sẽ hợp lý hơn đó bạn.

Route::middleware('auth')->group(function () {
    Route::middleware('authorize')->group(function () {
        // TO DO
    }
}
Chia sẻ
Đã trả lời thg 12 31, 2020 7:55 SA
0

Bạn có thể làm được theo cách sau:

Parent class:

class Parent extends Controller{
     
    protected $myMiddlewares;
    construct() {
        $this->myMiddlewares = $this->middleware('auth');
    }
}

Ở chill class:

class Child extends Parent{
    construct() {
        parent::__construct();
        $this->myMiddlewares->except('index');
    }
    
    function index(){}
    .....
}

Tuy nhiên, quan điểm của mình thì dùng theo cách group ở routing vẫn tốt hơn

Chia sẻ
Đã trả lời thg 1 6, 2021 7:54 SA
0

Mình nghĩ thì có thể làm như sau:

class Parent extends Controller
{
    protected $excptMdwAuth = [];

    construct()
    {
        $this->middleware('auth',  ['except' => $this->excptMdwAuth);
    }
}

class Child extends Parent
{
    protected $excptMdwAuth = ['index'];
}
Chia sẻ
Đã trả lời thg 12 24, 2020 6:53 SA
-1

Bạn thử cách này xem sao

$this->middleware('auth', ['except' => [ 'index' ]] );

Chia sẻ
Avatar Hưng Duy @hoangduyhunglc
thg 12 28, 2020 8:57 SA
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí