前我创建了自己的MVC,并且有一个index.php
所有页面都从它的方式传递。我的意思是,我可以将重定向(header('Location: ..');
)放入index.php
,然后我的网站页面都无法打开。
现在我使用Laravel,我需要一个核心页面(如index.php
)。因为我的新网站支持多种语言。这是我目前的代码:
// app/Http/routes.php
Route::get('/{locale?}', 'HomeController@index');
// app/Http/Controllers/HomeController.php
public function index($locale = null)
{
if(!is_null($locale)) {
Lang::setLocale($locale);
}
dd(Lang::getLocale());
/* http://localhost:8000 => output: en -- default
* http://localhost:8000/abcde => output: en -- fallback language
* http://localhost:8000/en => output: en -- defined language
* http://localhost:8000/es => output: es -- defined language
* http://localhost:8000/fa => output: fa -- defined language
*/
}
如您所见,在我当前的算法中,我需要检查用户为每条路线设置的语言。我的网站也有近30条路线。我可以为每条路线手动完成30次,但我认为有一种方法可以让我为所有路线做一次。不存在吗?
换句话说,如何为每个页面设置当前语言(用户已设置)?我应该单独检查/设置每条路线吗?
答案 0 :(得分:2)
Laravel有一种更聪明的方法可以解决您的麻烦。它被称为Middleware。所以你可以创建LangMiddleware并将你的逻辑放在里面。
像
这样的东西public function handle($request, Closure $next, $locale = null)
{
if ($locale && in_array($locale, config('app.allowed_locales'))) {
Lang::setLocale($locale);
}
else{
Lang::setLocale(config('app.fallback_locale'));
}
return $next($request);
}