You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel如何访问参数在子目录左侧的URL及测试对应路由

路由构造与测试方法

首先先纠正基础认知:

  • Laravel的路由路径参数是按路径段逐位匹配的,没有“固定子目录必须放在路由参数前方”的强制规则,路径里写的固定字符串必须和访问URL对应位置的段完全一致,{参数名}形式的占位符直接替换成实际值即可,不需要把参数放到?后面的query串里。
  • 你之前对Route::get('/Foo/{type}', 'FooController@index')的理解有误:这个路由的正确访问形式不是/Foo?type=bar,而是/Foo/bar,?后面传参是query参数的形式,仅对应路由里没有定义占位符的额外参数。

你当前路由的URL构造规则

你定义的路由是:

Route::get('/{type}/Foo/{page}/{date}', 'FooController@index');

路径从左到右共4个段,对应规则如下:

  1. 第一段:路由参数{type},替换成你的实际类型值
  2. 第二段:固定字符串Foo,必须原样写在URL对应位置,不能修改
  3. 第三段:路由参数{page},替换成实际页码值
  4. 第四段:路由参数{date},替换成实际日期值

举个实际例子,如果你的参数值分别是:

  • type = article
  • page = 3
  • date = 2024-06-01
    那么最终构造的访问URL就是:/article/Foo/3/2024-06-01
    如果你的本地开发服务地址是http://127.0.0.1:8000,直接在浏览器访问http://127.0.0.1:8000/article/Foo/3/2024-06-01就能命中该路由。

测试方法

  • 先确认路由注册生效:在项目根目录执行Artisan命令php artisan route:list,在返回的路由列表里能找到对应/{type}/Foo/{page}/{date}的条目,就说明路由注册没有问题。
  • 控制器接收参数:在FooController的index方法里按占位符名称引入参数即可,示例代码:
public function index($type, $page, $date)
{
    // 打印参数验证是否获取正确
    dump($type, $page, $date);
    // 其余业务逻辑
}
  • 如果路由加了参数正则约束(比如要求date必须是Y-m-d格式),传参必须符合约束规则,否则会返回404。

补充说明:如果你确实想通过?type=xxx的query形式传参,就不要在路由路径里写对应的参数占位符,直接定义固定路径后,在控制器里通过$request->query('参数名')获取即可。

内容的提问来源于stack exchange,提问作者Tomk07

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 23:42:26