有可能"链" Laravel RESTful路由?

时间:2016-08-26 21:22:11

标签: php laravel web-frameworks

我理解Laravel你可以使用Route::resource路由方法处理/user/1https://laravel.com/docs/5.0/controllers#restful-resource-controllers

之类的事情

我想知道的是如何创造最好的方式来链接"方法,所以我不重复代码。

例如说我有/team/1/user/1,我可以路由一个TeamUsers控制器,该控制器从" show"中的数据库中抓取团队和用户。方法

现在,如果我想创建一个/team/1/group/1路由到TeamGroups控制器,我会有重复的代码从数据库中再次获取团队。

什么是向后链接并且只在一个点上编写检索团队代码的最佳方式?

干杯

3 个答案:

答案 0 :(得分:1)

Laravel实际上有一个route model binding的概念,它会为你解决这个问题。因此,您的代码最终会看起来像:

Route::get('team/{team}/user/{user}', function (App\Team $team, App\User $user) {
    $team_name = $team->name;
    $user_name = $user->name;
});

然后对于小组来说也一样:

Route::get('team/{team}/group/{group}', function (App\Team $team, App\Group $group) {
    $team_name = $team->name;
    $group_name = $group->name;
});

答案 1 :(得分:0)

例如,您可以编写Repository类来获取所有数据 https://bosnadev.com/2015/03/07/using-repository-pattern-in-laravel-5/

答案 2 :(得分:0)

您可以使用嵌套资源https://laravel.com/docs/5.1/controllers#restful-nested-resources

嵌套资源 有时,您可能需要定义到“嵌套”资源的路由。例如,照片资源可以具有可以附加到照片的多个“注释”。要“嵌套”资源控制器,请在路由声明中使用“点”表示法:

Route::resource('photos.comments', 'PhotoCommentController');

此路由将注册一个“嵌套”资源,可以使用如下网址访问这些资源:photos/{photos}/comments/{comments}

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

class PhotoCommentController extends Controller
{
    /**
     * Show the specified photo comment.
     *
     * @param  int  $photoId
     * @param  int  $commentId
     * @return Response
     */
    public function show($photoId, $commentId)
    {
        //
    }
}