spatie/laravel-translatable 5.6 无法翻译 slug 并抛出 404
spatie/laravel-translatable 5.6 cannot translate slug and throws 404
我的数据库中有 'courses' table 和 JSON 'slug' 列。例如:
| Slug |
|------------------------------------------------------|
| {"az": "slug-in-azerbaijani", "ru": "slug-in-russian"|
| {"az": "another-slug-az", "ru": "another-slug-in-rus"|
现在,当我进入课程详细信息时,我通过 slug 获取课程详细信息。这是控制器:
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 是:
然后我将网站语言更改为另一种语言,它不会翻译 slug。 URL 变为
并抛出 404 页面。但是,它必须是
我该如何解决这个问题?这是 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');
});
其实我已经解决了这个问题。逻辑是:当我在详细课程(博客或 smth)中时,我得到文章的 id。之后,当我更改页面的语言时,我重定向到 course/id,而不是 course/slug,然后我重定向到 course/slug。这是我的部分代码:
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);
}
我的数据库中有 'courses' table 和 JSON 'slug' 列。例如:
| Slug |
|------------------------------------------------------|
| {"az": "slug-in-azerbaijani", "ru": "slug-in-russian"|
| {"az": "another-slug-az", "ru": "another-slug-in-rus"|
现在,当我进入课程详细信息时,我通过 slug 获取课程详细信息。这是控制器:
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 是:
然后我将网站语言更改为另一种语言,它不会翻译 slug。 URL 变为
并抛出 404 页面。但是,它必须是
我该如何解决这个问题?这是 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');
});
其实我已经解决了这个问题。逻辑是:当我在详细课程(博客或 smth)中时,我得到文章的 id。之后,当我更改页面的语言时,我重定向到 course/id,而不是 course/slug,然后我重定向到 course/slug。这是我的部分代码:
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);
}