我的路线:
Route::apiResource('courses', 'CourseController');
Route::apiResource('courses.classrooms', 'ClassroomController');
列表:php artisan route:list
api/v1/courses/{course}
api/v1/courses/{course}/classrooms/{classroom}
我的问题是:我在classroom controller
中的所有功能都需要course
,诸如此类
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中有一些策略/帮助程序可以自动完成此操作吗?
我认为没有必要在所有函数中手动添加属性$course_id
,该怎么办?
答案 0 :(得分:0)
您可以使用group
将所有路线围起来。像这样:
Route::group(['prefix' => '{course}'], function () {
// you can place your routes here
});
因此该组中存在的所有路由在url路径中已经具有course
值,并且您不必为每条路由“重写”。
例如,如果该字段是由您设置的env
变量,则可以在RouteServiceProvider
内部将所需的前缀放在mapApiRoutes
函数中。
protected function mapApiRoutes()
{
Route::prefix('/api/v1/courses/'.config('app.myVariable'))
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
}
这样,您的所有api端点都将以该前缀开头,并且可以在所有端点中使用它。
答案 1 :(得分:0)
如果按照您发布的方式正确注册了路线,则library(dplyr)
library(tidyr)
df1 %>%
mutate(Gene = na_if(Gene, "")) %>%
fill(Gene) %>%
group_by(Gene) %>%
slice(which.max(pvalue))
中的方法应该会收到一个附加参数,即网址中的课程ID片段。
例如,如果您请求ClassroomsController
路由,则控制器将收到设置为/api/v1/courses/1/classrooms
的正确{course}
参数作为第一个参数。
然后,您可以实现ClassroomsController的index方法以使用隐式模型绑定并获取具有课程的给定URL ID的Course实例。
为此,您必须键入“课程”模型的第一个函数的参数,并将变量命名为要用于检索模型的url片段。
在您的代码示例中,您应该这样做:
1
注意:我假设您在“课程”和“课堂”模型之间存在关系,以便从课程模型实例中检索教室
您可以在官方文档here
中了解更多相关信息