Laravel:在控制器之前写入会话代码的位置

时间:2017-02-21 21:52:52

标签: laravel session controller locale lang

对于多语言网站,在所有控制器的所有方法中都有这一行:\ App :: setLocale(session(' lang'));

我可以把它放在哪里不重复? (在AppServiceProvider中尝试过,...)

或者多语种网站还有其他可能性吗?

干杯,

伊夫

2 个答案:

答案 0 :(得分:0)

执行此类操作的最佳位置可能是middleware

在自定义中间件的handle功能中,您可以访问会话,因此您可以更改区域设置。然后,您可以将此中间件应用于所有适用的路由甚至是中间件组。

答案 1 :(得分:0)

默认情况下,laravel在config/app.php文件

中维护区域设置

您可以通过动态修改语言环境值来简单地覆盖它。我建议您在App\Providers\AppServiceProvider方法的boot上添加代码。

你可以用两种方式实现它

// Modifying config value
$this->app['config']['app.locale'] = session("lang", "en");

// Setting by App::setLocale
$this->app->setLocale(session("lang", "en"));

AppServiceProvider.php

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {   
        // Modifying config value
        $this->app['config']['app.locale'] = session("lang", "en");
        // or 
        // Setting by App::setLocale
        $this->app->setLocale(session("lang", "en"));
    }
}