我需要创建一个具有多个区域设置的应用程序。每个路由都以区域设置为前缀。例如,xxx.com/en/home
, xxx.com/fr/home
.
问题是,我需要将区域设置字符串动态绑定到路由前缀。由于用户可以更改区域设置,因此区域设置字符串存储在会话中。我需要引用 web.php 上的会话。 Session 对象不能在 web.php 的全局作用域中使用,这意味着 session('key') 不会在最外层作用域中为您提供任何内容(空),除了路由函数,因为 Laravel 在实例化任何会话之前解析 web.php对象,我认为。因此,我面临一个难题,因为我无法在 web.php 的最外层范围中引用会话,而我需要会话来创建动态前缀。我该如何解决这个问题?
你可以使用这样的东西:
Route::prefix(App::getLocale())->middleware('lang')->group(function () {
// Routes
});
Lang中间件:
class Language {
public function handle(Request $request, Closure $next)
{
$locale = $request->segment(1);
if (in_array($locale, config('app.locales'))) {
\App::setLocale($locale);
return $next($request);
}
if (!in_array($locale, config('app.locales'))) {
$segments = $request->segments();
$segments[0] = config('app.fallback_locale');
return redirect(implode('/', $segments));
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)