首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel - Routes:控制器嵌套控制器

Laravel - Routes:控制器嵌套控制器
EN

Stack Overflow用户
提问于 2019-08-05 19:11:55
回答 2查看 281关注 0票数 0

我的路线:

代码语言:javascript
复制
Route::apiResource('courses', 'CourseController');
Route::apiResource('courses.classrooms', 'ClassroomController');

列表:php artisan route:list

代码语言:javascript
复制
api/v1/courses/{course}
api/v1/courses/{course}/classrooms/{classroom}

我的问题是:我在classroom controller中的所有函数都需要course,类似这样

代码语言:javascript
复制
public function index($course_id)
{
  $classroom = Classroom::where('course_id', $course_id)->get();
  return $classroom;
}

public function store($course_id, Request $request)
{
// ...
  $classroom->course_id = $course_id;
// ...
}

public function show($course_id, $id)
{
  $classroom = Classroom::where('course_id', $course_id)->find($id);
  return $classroom;
}
// ...

在Laravel中有一些Policy/Helper可以自动完成这个任务吗?

我相信没有必要在所有函数中手动添加$course_id属性,我该怎么办?

EN

回答 2

Stack Overflow用户

发布于 2019-08-05 19:18:40

您可以使用group来封装所有路由。类似于:

代码语言:javascript
复制
 Route::group(['prefix' => '{course}'], function () {

// you can place your routes here

});

因此,存在于该组中的所有路由都将在url路径中具有course值,并且您不必为每个路由“重写它”。

如果该字段是由您设置的,例如一个env变量,那么在您的RouteServiceProvider中,您可以在mapApiRoutes函数中添加您想要的前缀。

代码语言:javascript
复制
 protected function mapApiRoutes()
    {
        Route::prefix('/api/v1/courses/'.config('app.myVariable'))
             ->middleware('api')
             ->namespace($this->namespace)
             ->group(base_path('routes/api.php'));
    }

这样,您的所有api端点都将以该前缀开头,并且您可以在所有端点中使用该前缀。

票数 0
EN

Stack Overflow用户

发布于 2019-08-05 21:02:17

如果路由像您发布的那样正确注册,那么ClassroomsController中的方法应该会收到一个额外的参数,即来自url的课程id片段。

例如,如果您请求/api/v1/courses/1/classrooms路由,控制器将收到设置为1的正确{course}参数作为第一个参数。

然后,您可以实现ClassroomsController的索引方法,以使用隐式模型绑定,并使用给定的课程url获取课程实例。

为此,你必须输入第一个函数参数的课程模型,并将变量命名为你想要用来检索模型的url片段。

在代码示例中,您应该执行以下操作:

代码语言:javascript
复制
public function index(Course $course)
{
    return $course->classrooms;
}

注意:我假设您在课程和教室模型之间有一个关系,以便从课程模型实例中检索教室

您可以在官方文档here上阅读更多关于这方面的内容

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57357407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档