Asked Dec 22nd, 2020 10:15 a.m. 151 0 5
  • 151 0 5
+2

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

Share
  • 151 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 ANSWERS


Answered Dec 22nd, 2020 2:37 p.m.
+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

Share
Avatar Ngân Kim @ngankim
Dec 23rd, 2020 10:40 a.m.

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

0
| Reply
Share
Answered Dec 28th, 2020 9:00 a.m.
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
    }
}
Share
Answered Dec 31st, 2020 7:55 a.m.
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

Share
Answered Jan 6th, 2021 7:54 a.m.
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'];
}
Share
Answered Dec 24th, 2020 6:53 a.m.
-1

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

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

Share
Avatar Hưng Duy @hoangduyhunglc
Dec 28th, 2020 8:57 a.m.
Viblo
Let's register a Viblo Account to get more interesting posts.