首页 > 解决方案 > laravel 中的嵌套资源不起作用

问题描述

我想要这样的嵌套资源:

Route::group(['prefix' => 'manage', 'middleware' => ['role:boss']], function () 
{
   Route::resource('/articles', 'ArticleController');

   Route::group(['prefix' => '/articles', 'as' => 'articles.'], function () {
        Route::resource('/types', 'ArticleTypeController');
    });
});

但是“文章/类型”的嵌套路由不起作用,我在“文章”路由之外检查了我的 ArticleTypeController 并工作。

我真的很困惑,大家可以帮帮我吗?

这是我的控制器:

class ArticleTypeController extends Controller
{

    public function index()
    {
        $types = ArticleType::all();
        return view('manage.articles.types.index')->withtypes($types);
    }
}

标签: laravelcontrollerroutes

解决方案


Route::group(['prefix' => 'manage', 'middleware' => ['role:boss']], function () 
{
   Route::get('articles/types', 'ArticleTypeController@articleTypeMethod');

   Route::resource('articles', 'ArticleController');    
   Route::resource('articles.types', 'ArticleTypeController');
});

对于嵌套资源使用articles.types。复数命名是好的。现在,manage/articles并且manage/articles/1/types将工作。

如果要放置自定义路由,如果控制器已用作资源,请将其放在资源路由上方。查看映射到's的articles/types [GET]路线。现在这种方式应该有效ArticleTypeControllerarticleTypeMethodhttp://localhost.com/manage/articles/types

这是5.1 文档,它已从 5.5 文档中删除。但看看泰勒在这里说了什么

不建议在 REST 上使用 index 函数articles/types,使用嵌套资源index方法,如articles/{id}/types. 因为articles/types您需要创建一个新方法。

但如果你仍然想那样做。就这样吧

Route::group(['prefix' => 'manage', 'middleware' => ['role:boss']], function () 
{
   Route::get('articles/types', 'ArticleTypeController@index');

   Route::resource('articles', 'ArticleController');    
   Route::resource('articles.types', 'ArticleTypeController', ['except' => ['index']]);
});

推荐阅读