php - 如何生成嵌套资源的链接?

标签 php laravel controller routes resources

我正在开发的 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 操作的链接,就像使用 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.'

有没有办法使用标准助手和外观生成嵌套资源的链接?

最佳答案

您的嵌套资源的路由定义不太正确。

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}.

关于php - 如何生成嵌套资源的链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37343590/

相关文章:

php - 如何获得以毫秒为单位的时差

php - 使用php监控apache的负载

php - 在 Laravel 中,如何在测试时给服务容器另一种实现?

symfony - bundle 不存在: Symfony2

C# MVC Controller 重定向到 Tel、SMS 和 mailto 链接

javascript - 到达 DIV 容器末尾后换行

java - json post请求java不发送数据到服务器

laravel - 处理 laravel 中的 jwt auth 错误

php - ajax发布请求url

javascript - angularjs 模块和 Controller 不工作