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:如何获取中间件中的参数列表的主要内容,如果未能解决你的问题,请参考以下文章