直到最近,这一直有效,直到我想对其稍作更改。我有一条路线
Route::get('/courses/{course}/lessons/{lesson}', 'CourseLessonController@show')->name('frontend.course.lesson');
我希望{lesson}
现在引用order_number,而不是id
列。
我已经在RouteServiceProvider中尝试过
Route::bind('lessons', function ($course, $lesson) {
return App\CourseLesson::where('order_number', $lesson)
->where('course_id', $course->id)
->first();
});
我还尝试过getRouteKeyName
的路线,这可能是可行的,除了它不能确保课程记录是{course}
所绑定课程的一部分。
public function getRouteKeyName() {
return 'order_number';
}
它们都不起作用,它似乎仍链接到id
列。甚至不能确保课程表中的列course_id
与传递给路线的{course}
相同...
这是我的控制器方法:
public function show(Course $course, CourseLesson $lesson) {
return view('frontend.lessons.show', compact('lesson', 'course'));
}
答案 0 :(得分:2)
欢迎使用StackOverflow:)
只需回答以下问题:
我还尝试过
getRouteKeyName
的路线,这可能是可行的,除了它不能确保课程记录是{course}
所绑定课程的一部分。
和
它们都不起作用,它似乎仍链接到
id
列。甚至不能确保课程表中的列course_id
与传递给路线的{course}
相同...
听起来您已经可以使用getRouteKeyName
(太棒了!),但是您担心的是,它无法验证该课程是否是课程的一部分。
这不是路由的目的-您应该在控制器中处理该逻辑。
例如:
public function show(Course $course, CourseLesson $lesson) {
// Confirm that this course/lesson combination is valid
if ($lesson->course_id == $course->id) {
return view('frontend.lessons.show', compact('lesson', 'course'));
}
// The lesson is not in this course
return redirect(route('home'));
}