Laravel

时间:2016-10-30 05:30:16

标签: php laravel laravel-routing

前我创建了自己的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次,但我认为有一种方法可以让我为所有路线做一次。不存在吗?

换句话说,如何为每个页面设置当前语言(用户已设置)?我应该单独检查/设置每条路线吗?

1 个答案:

答案 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);
}