Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何生成到嵌套资源的链接?_Php_Laravel_Controller_Routing_Resources - Fatal编程技术网

Php 如何生成到嵌套资源的链接?

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

我正在开发的Laravel应用程序有两个资源

第二个资源的路由如下所示:

$ 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)会从路由甚至控制器方法名称中扣除。。。