Anh chị cho em hỏi chút về sử dụng Middleware trong Laravel với ạ.
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
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
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
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
}
}
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
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'];
}