我使用Laravel 5.6。
我需要在控制器中用相同的方法分配两个不同的中间件,但使用不同的请求方法(发布和放置)。
我知道可以在route/web.php
中进行分配。
但是我只是想知道有什么方法可以在“仅控制器”中解决此问题吗?
这是下面的代码
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
}
}
}
但是上面的代码会给我带来麻烦,因为它将同时检查MIDDLEWARE。
答案 0 :(得分:0)
哈哈。我只是解决了自己的问题。
实际上,这非常简单。只需在__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