嵌套控制器和路由

时间:2017-03-14 09:25:12

标签: php laravel

我正在创建一个用户可以创建客户

的信息中心

每个客户都有:类别,员工,...... 现在我想知道如何构建路线。

例如,如果我创建以下内容:(伪代码)

Route::get('clients/{id}/');
Route::get('clients/{id}/categories');
Route::get('clients/{id}/categories/{category}');
Route::get('clients/{id}/categories/{category}/questions/{question}');

这似乎是很多不必要的参数..

你们是怎么做到的?我真的想在一个单独的页面上拆分类别,将员工分成一个单独的页面。

谢谢。

3 个答案:

答案 0 :(得分:1)

在我的所有项目中,我避免在URL中使用大量嵌套实体,所以我分开访问每个实体,这也是@jeffrey_way在Laraasts培训网站Laracasts上推荐的。 所以,我会做以下事情:

Route::get('clients/{id}/');
Route::get('categories/{client_id}');
Route::get('categorie/{category}');   //not that i have removed the plural s from categorie(s)
Route::get('question/{question}');
祝你好运

答案 1 :(得分:1)

老实说,这取决于你的应用程序的大小,我可能会将它们分组,所以仍然保持相同的结构。

Route::group('clients/{id}', function()
{

    Route::get('/');

    Route::group('categories', function()
    {

        Route::get('/');
        Route::get('{category}');
        Route::get('{category}/questions/{question}');
    })
})

与您的相同,但如果您扩展类别或客户端,我觉得稍后会进行一些清理。

答案 2 :(得分:0)

在这种情况下,我宁愿在GET方法中使用所有参数只使用一条路径。所以,我只想添加一个参数:

Route::get('client/create', 'ClientController@store');

因此,所有参数都将由store的{​​{1}}方法维护,如下所示:

ClientController

当我需要触发这条路线时,我会做类似下面的事情:

public function store(Request $request){ $category = $request->get('category') //...... //get other get parameters like this when required }

如您所知,我们可以使用旧的全球朋友<a href="{{url('client/create').'?category=1&question=2'}}">Create link</a>变量传递我们的参数。