Laravel 5如何在中间件中获取路由参数?

laravel中获取路由参数的五种方法 大家都知道laravel 获取路由参数的方式有很多,并且有个小坑,现汇总如下,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
假设我们设置了一个路由参数:
/**
* 定义路由参数名称分别为: param1,param2
*/
route::get(‘/{param1}/{param2}’, ‘testcontroller@index’);
现在我们访问 http://test.dev/1/2
在 testcontroller 中:
/**
* 路由参数获取方法
*
* @param illuminate\http\request $request 依赖注入 request 实例,放在参数中什么位置都可以自动加载
* @param mixed $arg2 要获取的路由参数
* @param mixed $arg1 要获取的路由参数
*/
public function index(request $request, $arg2, $arg1)
{
/**
* 方法一:按照 url 中路由参数先后顺序来获取
* 注意:此种方式有个小坑,获取的值只与顺序有关,与名称无关
*/
echo $arg2; //结果为 1 ,因为 $arg2 在第一位,获取的是第一个路由参数 param1 的值
echo $arg1; //结果为 2 ,因为 $arg1 在第二位,获取的是第二个路由参数 param2 的值
/**
* 方法二:按照路由参数名称来获取
* 注意:此处名称是 route 中定义的参数名,非上面方法中的参数名
*/
$request-》route(‘param1’); //结果为 1 ,获取的是第一个路由参数
$request-》route(‘param2’); //结果为 2 ,获取的是第二个路由参数
/**
* 方法三:使用 request() 辅助函数来获取,效果同方法二
*/
request()-》route(‘param1’); //结果为 1 ,如果不带路由参数名则返回当前的route对象
request()-》route(‘param2’); //结果为 2 ,如果不带路由参数名则返回当前的route对象
/**
* 方法四:使用 route facade
*/
\route::input(‘param1’); //结果为 1 ,该方法必须带路由参数名
\route::input(‘param2’); //结果为 2 ,该方法必须带路由参数名
/**
* 方法五:使用 illuminate\http\request 实例动态属性
*/
$request-》param1; //结果为 1 ,laravel 5.4+ 可用
$request-》param2; //结果为 2 ,laravel 5.4+ 可用
// 或者
request()-》param1; //结果为 1 ,laravel 5.4+ 可用
request()-》param2; //结果为 2 ,laravel 5.4+ 可用
//或者
request(‘param1’); //结果为 1 ,laravel 5.4+ 可用
request(‘param2’); //结果为 2 ,laravel 5.4+ 可用
/**
* 注意:laravel 在处理动态属性的优先级是,先从请求的数据(post/get)中查找,没有的话再到路由参数中找。
* 例如:url : http://test.dev/1/2?param1=a¶m2=b
* $request-》param1; request()-》param1; request(‘param1’); //结果为 a
* $request-》param2; request()-》param2; request(‘param2’); //结果为 b
*/
}
以上就是 laravel 获取路由参数的 5 种方法。
laravel 5如何在中间件中获取路由参数? 路由部分
[php] view plain copy print?
route::get(‘test/age/{age}’,[
‘middleware’ =》 ‘old’,
‘uses’=》‘test@test’
]);
如果你要指派中间件给特定路由,你得先在 app/http/kernel.php 给中间件设置一个好记的 键,默认情况下,这个文件内的$routemiddleware 属性已包含了 laravel 目前设置的中间件,你只需要在清单列表中加上一组自定义的键即可。
kernel部分
[php] view plain copy print?
protected $routemiddleware = [
‘auth’ =》 \app\http\middleware\authenticate::class,
‘auth.basic’ =》 \illuminate\auth\middleware\authenticatewithbasicauth::class,
‘can’ =》 \illuminate\foundation\http\middleware\authorize::class,
‘guest’ =》 \app\http\middleware\redirectifauthenticated::class,
‘throttle’ =》 \illuminate\routing\middleware\throttlerequests::class,
‘old’=》\app\http\middleware\oldmiddleware::class //增加
];
中间件部分
[php] view plain copy print?
public function handle($request, closure $next)
{
//$age = $request-》route(‘age’);
$age = $request-》age;//两者均可
if($age《=200)
{
echo ‘《=200’;
die();
}
return $next($request);
}
控制器部分
php] view plain copy print?
public function test($age)
{
echo $age;
}
整个访问流程
用户输入(例http://localhost/test/age/1)
被中间件捕获,判断age值如果小于则直接输出“《=200”,然后停止往下传值,反之通过判断继续往下传值
age值传入到控制器
直接打印输出

无处不在的无线智能:6G网络的关键驱动与研究挑战
芜湖市推电子产业项目扶持新政策,单个项目补贴最高达2000万
天津力神方型锂离子电池
STC12C2052AD单片机控制的改进型调压电路
氢能爆发前夜:连接器新能源领域的未来较量
Laravel 5如何在中间件中获取路由参数?
RJ45以太网接口的EMC设计
创基Type-C集线器外观精巧实用性强
Ubuntu中添加新硬盘
万万没想到!白客、韩乔生、王涛、刘语熙竟然在海信成团出道
立达信物联科技的 A19 可调白光LED灯泡
美高森美扩展用于网络边缘部署的主时钟定时选项
安全防范系统以为什么追求社会效益为主要目的?
如何自制PCB电路板,自制PCB电路板的四个步骤
AI新算法可用出租车监测城市空气污染
埃森哲携手码隆科技战略布局人工智能
电机的几个计算公式
时隔三年回归的小米平板5系列值得买吗
武汉成立一联合实验室,居然让30家传感器企业有了“最强外脑”?
博世暂时放弃生产电芯,与新势力造车企业进行积极合作