Laravel 5.6嵌套资源路由问题:URL含中间ID时路由生成异常
解决Laravel嵌套资源路由生成异常的问题
嘿,我帮你排查下这个路由生成的问题哈!你遇到的异常根源在于用错了route()助手的传参方式——你直接把URL路径当成路由名称传入,这不符合Laravel路由助手的使用规则。
第一步:先确认嵌套资源路由的正确名称
Laravel的资源路由会自动生成规范的命名格式,嵌套资源的路由名称是父资源名.子资源名.动作。你可以通过Artisan命令查看所有路由的详细信息:
php artisan route:list
针对你定义的Route::resource('project/{pid}/tasks','TaskController');,对应的任务列表路由名称应该是project.tasks.index(对应GET请求的列表页)。
第二步:修正路由生成的代码
你需要把路由名称作为第一个参数传给route()助手,然后把所需的路由参数(这里是pid)以数组形式作为第二个参数传入。正确的写法有两种:
写法一:显式传递参数
<a href="{{ route('project.tasks.index', ['pid' => $project->id]) }}" class="btn btn-primary btn-xs"> <i class="fa fa-tasks"></i> Tasks </a>
写法二:直接传入模型(更简洁的方式)
如果你的路由支持模型绑定,或者只是想简化代码,也可以直接传入$project对象,Laravel会自动提取它的id值作为pid参数:
<a href="{{ route('project.tasks.index', $project) }}" class="btn btn-primary btn-xs"> <i class="fa fa-tasks"></i> Tasks </a>
为啥原来的写法会出错?
你之前写的route('project/{$pid}/tasks')是把URL路径字符串传给了route()助手,但这个方法的第一个参数要求是路由的名称,不是URL路径。Laravel找不到名称为project/{$pid}/tasks的路由,自然就会抛出异常啦。
内容的提问来源于stack exchange,提问作者Yogendra
相关产品推荐
相关产品推荐

