【问题标题】:Laravel use route parameter in middlewareLaravel 在中间件中使用路由参数
【发布时间】:2016-02-14 04:39:23
【问题描述】:

找不到任何与我的情况特别匹配的内容。我有一个路由组定义为:

Route::group(['prefix' => 'api/v1/{access_token}'], function(){
    ...
}

上面的组里面有几个资源路由。我正在尝试创建一个自定义中间件,它将验证 access_token 参数并在参数无效时返回 400 响应。我希望能够在我的控制器中进行这样的操作:

class ProductController extends Controller {

    /**
     * Instantiate a new ProductController
     */
    public function __construct()
    {
        $this->middleware('verifyAccessToken');
    }
    ...
}

我的问题不是“我如何定义自定义中间件”,而是我如何才能从在自定义中间件的handle 函数中访问access_token 参数?

编辑:虽然建议作为重复的问题相似并且有答案,但该答案似乎已经过时和/或对于我想要完成的事情不满意。

【问题讨论】:

  • 您有什么特别的原因不想将中间件放在自己的路由组上吗?
  • @Ohgodwhy 不。我通常更喜欢在我的控制器中定义它,但我愿意接受任何可以让我完成我想要的解决方案。
  • 你试过我的答案了吗?它应该正是您正在寻找的。​​span>

标签: php laravel laravel-5.1 laravel-middleware


【解决方案1】:

你可以从你的 $request 对象中使用魔术__get 方法访问它,如下所示:

public function handle($request, Closure $next)
{
    $token = $request->access_token;
    // Do something with $token
}

【讨论】:

    【解决方案2】:

    http://laravel.com/docs/master/middleware#middleware-parameters

    为了简单

    public function yourmethod($access_token){
        $this->middleware('verifyAccessToken', $access_token);
    }
    

    我认为你不能在 __construct() 方法中做到这一点。

    【讨论】:

    【解决方案3】:

    只需将中间件粘贴在 Route::group 上

    Route::group(['prefix' => 'api/v1/{access_token}', 'middleware' => 'verifyAccessToken'], function(){
    
    });
    

    然后,正如 Thomas Kim 指出的那样,在您的中间件中,您可以使用 $request 对象来访问传递给路由的令牌。

    public function handle($request, Closure $next)
    {
        $token = $request->access_token;
        // Do something with $token
    }
    

    【讨论】:

      猜你喜欢
      • 2020-01-11
      • 2019-06-16
      • 2020-08-31
      • 2015-10-31
      • 1970-01-01
      • 2015-12-27
      • 2017-03-06
      • 2021-09-28
      • 2017-04-06
      相关资源
      最近更新 更多