Laravel - 将中间件分配给控制器中具有特定请求方法的特定方法
Laravel - Assign Middleware to specific method with specific request method in controller
我用Laravel 5.6.
我需要在控制器中分配两个不同的中间件,方法相同但请求方法不同(post 和 put)。
我知道可以在route/web.php
中赋值。
但我只是想知道有什么办法可以在ONLY CONTROLLER中解决这个问题吗?
这是下面的代码
namespace App\Http\Controllers\Users;
use Illuminate\Http\Request;
use App\Http\Controllers\Admin\Auth\AuthPagesController;
class Users extends AuthPagesController
{
//
public function __construct()
{
//this middleware should be for POST request
$this->middleware('permission:User -> Add Item')->only('save');
//this middleware should be for PUT request
$this->middleware('permission:User -> Update Item')->only('save');
}
public function save(Request $req, $id=null){
if ($req->isMethod('post')){
//only check for middleware 'permission:User -> Add Item'
//then run the 'Add Item' code
}elseif($req->isMethod('put')){
//only check for middleware 'permission:User -> Update Item'
//then run the 'Update Item' code
}
}
}
但是上面的代码会给我带来问题,因为它会检查两个中间件。
哈哈。我刚刚解决了我自己的问题。
其实很简单。只需在 __construct
方法中这样做即可。
public function __construct(Request $req)
{
//this middleware should be for POST request only
if($req->isMethod('post')){
$this->middleware('permission:User -> Add Item')->only('save');
}
//this middleware should be for PUT request only
if($req->isMethod('put')){
$this->middleware('permission:User -> Update Item')->only('save');
}
}
public function save(Request $req, $id=null){
// for security purpose, allow only 'post' and 'put' request
if(!$req->isMethod('post') && !$req->isMethod('put')) return false;
if ($req->isMethod('post')){
//only check for middleware 'permission:User -> Add Item'
//then run the 'Add Item' code
}elseif($req->isMethod('put')){
//only check for middleware 'permission:User -> Update Item'
//then run the 'Update Item' code
}
}
希望这个回答对其他人有所帮助。 :D
我用Laravel 5.6.
我需要在控制器中分配两个不同的中间件,方法相同但请求方法不同(post 和 put)。
我知道可以在route/web.php
中赋值。
但我只是想知道有什么办法可以在ONLY CONTROLLER中解决这个问题吗?
这是下面的代码
namespace App\Http\Controllers\Users;
use Illuminate\Http\Request;
use App\Http\Controllers\Admin\Auth\AuthPagesController;
class Users extends AuthPagesController
{
//
public function __construct()
{
//this middleware should be for POST request
$this->middleware('permission:User -> Add Item')->only('save');
//this middleware should be for PUT request
$this->middleware('permission:User -> Update Item')->only('save');
}
public function save(Request $req, $id=null){
if ($req->isMethod('post')){
//only check for middleware 'permission:User -> Add Item'
//then run the 'Add Item' code
}elseif($req->isMethod('put')){
//only check for middleware 'permission:User -> Update Item'
//then run the 'Update Item' code
}
}
}
但是上面的代码会给我带来问题,因为它会检查两个中间件。
哈哈。我刚刚解决了我自己的问题。
其实很简单。只需在 __construct
方法中这样做即可。
public function __construct(Request $req)
{
//this middleware should be for POST request only
if($req->isMethod('post')){
$this->middleware('permission:User -> Add Item')->only('save');
}
//this middleware should be for PUT request only
if($req->isMethod('put')){
$this->middleware('permission:User -> Update Item')->only('save');
}
}
public function save(Request $req, $id=null){
// for security purpose, allow only 'post' and 'put' request
if(!$req->isMethod('post') && !$req->isMethod('put')) return false;
if ($req->isMethod('post')){
//only check for middleware 'permission:User -> Add Item'
//then run the 'Add Item' code
}elseif($req->isMethod('put')){
//only check for middleware 'permission:User -> Update Item'
//then run the 'Update Item' code
}
}
希望这个回答对其他人有所帮助。 :D