5,6 не может перевести слизняк и бросок 404

У меня есть таблица курсов в моей базе данных и столбец JSON 'slug'. Например:

| Slug                                                 | 
|------------------------------------------------------|
| {"az": "slug-in-azerbaijani", "ru": "slug-in-russian"|
| {"az": "another-slug-az", "ru": "another-slug-in-rus"|

Теперь, когда я вхожу в детали курса, я получаю детали курса по слагу. Вот контроллер:

public function detailed($slug) {

        $locale = app()->getLocale();

        $course = Course::where(\DB::raw( "json_extract(slug, '$." . $locale . "')" ), $slug)->firstOrFail();$popularCourses = Course::inRandomOrder()->limit(3)->get();

        if(!$course) {
            return abort(404);
        }

        $data = array(
            'course' => $course,
            'instructor' => $course->instructor
        );

        // Fetch detailed information about instructor and courses that belongs to him
        return view('courses.detailed')->with($data);
    }

Однако есть одна проблема. Если я в деталях курса, и URL-адрес:

HTTP: // локальный: 8000 / dz / курсы / пробкового-в-азербайджанец

тогда я меняю язык сайта на другой язык, он не переводит слаг. URL становится

HTTP: // локальный: 8000 / RU / курсы / пробкового-в-азербайджанец

и это выбрасывает 404 страницы. Тем не менее, это должно быть

HTTP: // локальный: 8000 / RU / курсы / пробкового-в-России

Как я могу решить эту проблему? Вот route.php:

Route::group(
    [
        'prefix' => LaravelLocalization::setLocale(),
        'middleware' => [ 'localeSessionRedirect', 'localizationRedirect', 'localeViewPath' ]
    ],
    function()
    {
        Route::get('/courses', 'CoursesController@index');
        Route::get('/courses/{slug}', 'CoursesController@detailed');
        Route::get('/courses/category/{slug}', 'CoursesController@getCoursesByCategory');
    });

1 ответ

Решение

Собственно, я решил проблему. Логика такова: когда я нахожусь в подробном курсе (блог или что-то), я получаю идентификатор статьи. После этого, когда я меняю язык страницы, я перенаправляю на курс / идентификатор, а не курс / слаг, и после этого я перенаправляю на курс / слаг. Вот часть моего кода:

public function routeById($type, $id) {

        if ($type == 'course') {
            $item = Course::find($id);
            $routeName = 'single_course';

        } else {
            $item = Category::find($id);
            $routeName = 'courses_by_category';
        }

        if (!$item) {
            return abort(404);
        }

        return redirect()->route($routeName, $item->slug);

    }
Другие вопросы по тегам