【问题标题】:Localization laravel本地化 laravel
【发布时间】:2018-07-14 10:26:19
【问题描述】:

我一直在尝试更新网站的语言。

控制器

public function getUpdateLanguage(Request $request) {
        $request_data = $request->all();
         \Session::put('locale', $request_data['language']);
        return redirect()->back();
}

中间件:

 public function handle($request, Closure $next)
 { 
    if ( \Session::has('locale')) {
        \App::setLocale(\Session::get('locale'));
    }
    return $next($request);
 }

if ( \Session::has('locale')) 的真正块永远不会执行,并且语言始终是“en”并且永远不会更新。如果我尝试它会很好

 public function handle($request, Closure $next)
 { 

     \App::setLocale('arabic');

    return $next($request);
 }

内核:

protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
        \App\Http\Middleware\TrustProxies::class,
        \App\Http\Middleware\Localization::class,
    ];

本地化是我的中间件。语言更新控制器方法重定向到主页:

public function getIndex() {
        return view('frontend.home');
}

有人可以指导我在哪里清除会话值,或者我做错了什么并且有更好的方法吗?

【问题讨论】:

  • 请把dump(session('locale'));放在return redirect()->back();之前。也把和handle方法第一行一样的代码放上去,显示结果。
  • 它返回 ''arabic' 进行转储,在控制器中添加中间件的代码仍然给我 'en'
  • 你能给我们看看你的内核吗??
  • @Sohel0415 更新
  • 在本地化之前将此添加到您的中间件\Illuminate\Session\Middleware\StartSession::class,

标签: php laravel session localization laravel-5.5


【解决方案1】:

\Illuminate\Session\Middleware\StartSession::class 添加到kernel.php 中的middleware 数组中:

protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \Illuminate\Session\Middleware\StartSession::class,
    \App\Http\Middleware\TrimStrings::class,
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    \App\Http\Middleware\TrustProxies::class,
    \App\Http\Middleware\Localization::class,
];

【讨论】:

  • 感谢您的帮助:)
  • 我也很高兴它有帮助:)
  • 你好,我有一个问题。将 StartSession 添加到中间件后,当我的表单被验证并重定向回视图时,$errors 为空。我搞砸了还是有什么办法可以解决?
  • 你使用过'withErrors()'吗?当你重定向
  • 是的..如果我删除 StartSession 然后我会看到错误.. 否则 $errors 是空的
【解决方案2】:

你可以这样做

中间件:

public function handle($request, Closure $next)
 { 
    App::setLocale(
        $request->session()->has('locale') ? 
        $request->session()->get('locale') : 
        App::getLocale()
    );

    return $next($request);
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-29
    • 2021-04-03
    • 2014-06-26
    • 1970-01-01
    • 2019-02-25
    • 2018-12-08
    • 2018-06-30
    • 1970-01-01
    相关资源
    最近更新 更多