Php 如何在Laravel中设置动态路由前缀?
我需要创建一个应用程序与多个地区。每个路由都以区域设置作为前缀。例如,Php 如何在Laravel中设置动态路由前缀?,php,laravel,Php,Laravel,我需要创建一个应用程序与多个地区。每个路由都以区域设置作为前缀。例如,xxx.com/en/home,xxx.com/fr/home 问题是,我需要将区域设置字符串动态绑定到路由前缀。由于用户可以更改区域设置,因此区域设置字符串存储在会话中。我需要参考web.php上的会话。Session对象不能在web.php上的globle作用域中使用,这意味着Session('key')在最外层的作用域中不会得到任何东西(null),除了路由函数,因为我认为Laravel在实例化任何Session对象之前
xxx.com/en/home
,xxx.com/fr/home
问题是,我需要将区域设置字符串动态绑定到路由前缀。由于用户可以更改区域设置,因此区域设置字符串存储在会话中。我需要参考web.php上的会话。Session对象不能在web.php上的globle作用域中使用,这意味着Session('key')在最外层的作用域中不会得到任何东西(null),除了路由函数,因为我认为Laravel在实例化任何Session对象之前解析web.php。因此,我面临一个难题,即当我需要会话来创建动态前缀时,我无法引用web.php上最外层范围内的会话。我怎样才能解决这个问题 我不确定您的场景和应用程序的复杂性,但我会尝试通过一次生成所有路由来保持简单,比如
$locales = [
'en',
'ru',
];
foreach ($locales as $locale) {
Route::group(['prefix' => $locale], function() {
Route::get('route1',function(){});
Route::post('route1',function(){});
});
} return false;
然后我将编写一个中间件来解析区域设置并相应地进行设置。希望能有所帮助。我最近在路由前面加上了locale,我发现使用它很容易实现。在设置包安装之后,我只需要为所有我想要的带有区域设置前缀的URL添加一个路由组
Route::group([
'prefix' => LaravelLocalization::setLocale(),
'middleware' => ['localeSessionRedirect', 'localizationRedirect']
], function()
{
Route::get('/contact', 'HomeController@contact_page');
});
您可以使用以下内容:
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));
}
}
}
如何添加一个中间件,找出本地和重定向相应。顺便说一句,你可以在应用程序的任何地方设置/访问
session()
helper。它可以完成这项工作。谢谢