【问题标题】:Laravel - Assign Middleware to specific method with specific request method in controllerLaravel - 在控制器中使用特定请求方法将中间件分配给特定方法
【发布时间】:2018-09-26 02:48:09
【问题描述】:

我使用 Laravel 5.6。

我需要在控制器中分配两个不同的中间件,使用相同的方法但不同的 REQUEST 方法(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

        }

    }
}

但是上面的代码会给我带来问题,因为它会检查 BOTH MIDDLEWARE。

【问题讨论】:

  • 试试request()->method()
  • 我强烈建议不要在中间件中进行授权。当你试图变得更细化时,你会遇到各种各样的问题。

标签: php laravel controller middleware


【解决方案1】:

哈哈。我刚刚解决了自己的问题。

其实很简单。只需在__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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 2018-10-22
    • 2017-07-25
    • 2018-07-29
    • 1970-01-01
    相关资源
    最近更新 更多