Явная привязка модели маршрута в Laravel? - PullRequest
1 голос
/ 21 апреля 2019

Так до недавнего времени это работало, пока я не хотел немного изменить его. У меня есть маршрут

Route::get('/courses/{course}/lessons/{lesson}', 'CourseLessonController@show')->name('frontend.course.lesson');

Я хочу, чтобы {lesson} теперь ссылался на порядковый номер, а не на 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'));
}

1 Ответ

2 голосов
/ 21 апреля 2019

Добро пожаловать в 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'));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...