Laravel 5:如何获取中间件中的参数列表

Posted

技术标签:

【中文标题】Laravel 5:如何获取中间件中的参数列表【英文标题】:Laravel 5: How to get list of Parameters in Middleware 【发布时间】:2017-02-02 17:51:21 【问题描述】:

如何在中间件中检索route 参数列表,尝试了多种方法但总是以错误或空结果结尾:

public function handle($request, Closure $next)

    $request->route()->parameter('page');           //Call to a member function parameter() on null
    $request->route()->parameters();                //Call to a member function parameters() on null
    Request::capture()->getParameter('page');       //Call to undefined method Illuminate\Http\Request::getParameter()

    Route::getCurrentRoute()->getParameter('page'); //Call to a member function getParameter() on null
    Route::getCurrentRoute()->getParameters();      //Call to a member function getParameters() on null
    Route::getParameter('page');                    //Method getParameter does not exist.

有没有办法在中间件中获取参数列表? 谢谢,

更新:(添加路线)

Route::get('test/page', array('uses'=>'test@test'));

Laravel 版本:5.1.20

【问题讨论】:

【参考方案1】:

您获得了NULL 值,因为您将中间件定义为全局且全局中间件在路由解析之前运行。

如果您需要访问路由参数,请将您的中间件用作App\Http\Kernel::$routeMiddleware 中的路由中间件:

protected $routeMiddleware = [
    'my.middleware' => [
        \App\Http\Middleware\MyMiddleware::class,
     ],
];

Proposals to change this behavior have been rejected by the Laravel maintainers due to architectural concerns.

【讨论】:

【参考方案2】:

使用request() 全局助手:

request()->route('page');

【讨论】:

使用request()->route('page');返回空 控制器:Route::get('test/page', array('uses'=>'test@test')); 您不应该从Request 类中获取数据吗? request()->page 应该可以解决问题。 @user3158900 打印时仍然为空request()->page【参考方案3】:
$request->route()->parameters();

【讨论】:

在 null 上调用成员函数参数() 说明你的$request有问题。因为你需要的是 $request->route()->parameters(); 请求的某些部分似乎还没有实例化,它在控制器中工作正常

以上是关于Laravel 5:如何获取中间件中的参数列表的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Laravel 5 中的请求中检索 url 参数?

如何在 Laravel 5.1 中获取数据库中的表列表

laravel 5.2 如何在刀片中获取路由参数?

如何在 laravel 5.5 中获取网络路由列表?

如何将控制器中的 Laravel 4.2 beforeFilter 转换为 Laravel 5.2 中的自定义中间件

在Laravel 5中,如何获取公用文件夹中所有文件的列表?