【发布时间】:2021-02-28 13:08:27
【问题描述】:
我有这些路由和中间件:
$locale = request()->segment(1);
Route::middleware('localized')->prefix($locale)->group(function() {
Route::get('/contacts', 'ContactController@index');
Route::get('/page/{page}', 'PageController@index');
});
以及从 Kernel.php 本地化的中间件 -> routeMiddleware:
public function handle(Request $request, Closure $next)
{
if (!array_key_exists($request->segment(1), config('translatable.locales'))) {
$segments = $request->segments();
$segments = Arr::prepend($segments, config('app.fallback_locale'));
if($request->session()->has('language')) {
$segments[0] = session('language');
}
return redirect()->to(implode('/', $segments));
}
return $next($request);
}
当我访问:site.test/contacts 时,他将我重定向到语言环境:site.com/en/contacts 当我访问 site.test/page/test 时,找不到 404,如果我访问:site.com/en/page/test 然后页面工作。带有路由模型绑定的语言环境重定向问题。
在控制器页面中我有:
public function index(Page $page)
{
return view('page', compact('page'));
}
在可翻译的.php中:
'locales' => [
'de' => 'Deutsch',
'en' => 'English',
],
在 AppServiceProvider 中:
public function boot()
{
if(array_key_exists(request()->segment(1), config('translatable.locales'))) {
app()->setLocale(request()->segment(1));
}
}
【问题讨论】:
-
您确定上面的示例代码有效吗?当我试图复制“当我访问时:site.test/contacts 他在语言环境中重定向我:site.com/en/contacts”但它对我不起作用,除非我添加语言环境 site.test/fr/contacts ..然后它工作。你的 translatable.php 配置文件是如何设置的?
-
@KolawoleEmmanuelIzzy 我用配置和提供者更新了我的问题。是的,我的代码有效