如何为嵌套资源生成 link?
How can I generate a link to a nested resource?
我正在处理的 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 的新 activity 的 POST 操作生成一个 link,就像我对 list-all-procedures 路由所做的那样;
$ 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.'
有没有一种方法可以使用标准助手和外观为嵌套资源生成 link?
您应该将 route()
与参数一起使用才能使其工作:
route('admin.procedure.{id}.activity.index', $id);
您对嵌套资源的路由定义不太正确。
Route::resource('procedure/{id}/activity', 'Admin\ProcedureActivityController');
应该是:
Route::resource('procedure.activity', 'Admin\ProcedureActivityController');
此外,我不确定您如何在 URI 中获取 {id}
,因为 ResourceRegistrar 将根据资源名称创建参数。根据第一个资源定义应 {procedure}
的定义。
您应该以 admin.procedure.activity.index
作为索引路由的路由名称结束。
route('admin.procedure.activity.index', ['procedure' => $id]);
Laravel 5.1 - Controllers - Restful - Nested Resources
Route::resource('photos.comments', 'PhotoCommentController');
This route will register a "nested" resource that may be accessed with URLs like the following: photos/{photos}/comments/{comments}
.
我正在处理的 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 的新 activity 的 POST 操作生成一个 link,就像我对 list-all-procedures 路由所做的那样;
$ 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.'
有没有一种方法可以使用标准助手和外观为嵌套资源生成 link?
您应该将 route()
与参数一起使用才能使其工作:
route('admin.procedure.{id}.activity.index', $id);
您对嵌套资源的路由定义不太正确。
Route::resource('procedure/{id}/activity', 'Admin\ProcedureActivityController');
应该是:
Route::resource('procedure.activity', 'Admin\ProcedureActivityController');
此外,我不确定您如何在 URI 中获取 {id}
,因为 ResourceRegistrar 将根据资源名称创建参数。根据第一个资源定义应 {procedure}
的定义。
您应该以 admin.procedure.activity.index
作为索引路由的路由名称结束。
route('admin.procedure.activity.index', ['procedure' => $id]);
Laravel 5.1 - Controllers - Restful - Nested Resources
Route::resource('photos.comments', 'PhotoCommentController');
This route will register a "nested" resource that may be accessed with URLs like the following:
photos/{photos}/comments/{comments}
.