Php 如何生成到嵌套资源的链接?
我正在开发的Laravel应用程序有两个资源 第二个资源的路由如下所示:Php 如何生成到嵌套资源的链接?,php,laravel,controller,routing,resources,Php,Laravel,Controller,Routing,Resources,我正在开发的Laravel应用程序有两个资源 第二个资源的路由如下所示: $ php artisan route:list | grep -i activity POST | admin/procedure/{id}/activity | admin.procedure.{id}.activity.store | (...)\ProcedureActivityController@store GET|HEAD | admin/pr
$ php artisan route:list | grep -i activity
POST | admin/procedure/{id}/activity | admin.procedure.{id}.activity.store | (...)\ProcedureActivityController@store
GET|HEAD | admin/procedure/{id}/activity | admin.procedure.{id}.activity.index | (...)\ProcedureActivityController@index
GET|HEAD | admin/procedure/{id}/activity/create | admin.procedure.{id}.activity.create | (...)\ProcedureActivityController@create
GET|HEAD | admin/procedure/{id}/activity/{activity} | admin.procedure.{id}.activity.show | (...)\ProcedureActivityController@show
PUT|PATCH | admin/procedure/{id}/activity/{activity} | admin.procedure.{id}.activity.update | (...)\ProcedureActivityController@update
DELETE | admin/procedure/{id}/activity/{activity} | admin.procedure.{id}.activity.destroy | (...)\ProcedureActivityController@destroy
GET|HEAD | admin/procedure/{id}/activity/{activity}/edit | admin.procedure.{id}.activity.edit | (...)\ProcedureActivityController@edit
我将此设置称为嵌套资源,因为活动是在过程下定义的。路线的定义如下所示:
Route::resource('procedure', 'ProcedureController');
Route::resource('procedure/{id}/activity', 'Admin\ProcedureActivityController');
我想为属于程序3的新活动生成一个到POST操作的链接,就像我列出所有程序路线一样
$ php artisan tinker
>>> route('admin.procedure.index')
=> "http://localhost/admin/procedure"
>>> route('admin.procedure.{id}.activity')
InvalidArgumentException with message
'Route [admin.procedure.{id}.activity] not defined.'
是否有一种方法可以使用标准助手和立面生成到嵌套资源的链接?您应该使用带有参数的route()
route('admin.procedure.{id}.activity.index', $id);
嵌套资源的路由定义不太正确
Route::resource('procedure/{id}/activity', 'Admin\ProcedureActivityController');
应该是:
Route::resource('procedure.activity', 'Admin\ProcedureActivityController');
另外,我不确定您如何在URI中获得{id}
,因为ResourceRegistrator将基于资源名称创建参数。基于第一个资源定义应为{procedure}
的定义
对于索引路由,应该以类似于admin.procedure.activity.index
的路由名称结束
route('admin.procedure.activity.index',['procedure'=>$id])代码>
Route::resource('photos.comments','PhotoCommentController')代码>
此路由将注册一个“嵌套”资源,可以使用如下URL访问:photos/{photos}/comments/{comments}
仅供参考,>>>路由('admin.procedure.{id}.activity',22);InvalidArgumentException,消息“Route[admin.procedure.{id}.activity]未定义”。很抱歉,我已从您的问题中复制粘贴的路由,并忘记将.index
添加到其中。请检查更新的答案。这同样有效:route('admin.procedure.activity.show',[10,20])是的,您可以这样传递它们,它们将按照您传递它们的顺序排列:)。我有一个习惯,就是使用关联数组来说明问题,如果传递的参数太多,它会将它们作为GET参数添加到url中。如果是资源路由,Http方法(GET,POST)和参数格式(url,formdata)会从路由甚至控制器方法名称中扣除。。。