【问题标题】:Laravel Set up User LanguageLaravel 设置用户语言
【发布时间】:2015-08-02 09:59:52
【问题描述】:

我有很多控制器,我想在所有这些(实际上是所有项目)中设置此代码,我该怎么做?

if( !empty(Input::get('lan')) ){
  Auth::user()->language = Input::get('lan');
  App::setLocale( Auth::user()->language );
}else{
  App::setLocale( Auth::user()->language );
}

【问题讨论】:

  • 看看middleware
  • 是的,答案是中间件,感谢您的帮助。

标签: php laravel laravel-5 laravel-localization


【解决方案1】:

您可以为此使用 Laravel 的中间件中间件是包裹请求处理的一层代码,可以在处理请求之前或/之后执行额外的代码。

首先,您需要中间件类。它需要一种称为 handle() 的方法来执行所需的逻辑。在您的情况下,它可能看起来像这样:

<?php namespace App\Http\Middleware;

use Auth;
use App;

class SetLang {
  public function handle($request, Closure $next) {
    if(empty($request->has('lan'))) {
      if (Auth::user()) {
        Auth::user()->language = $request->input('lan');
        Auth::user()->save(); // this will do database UPDATE only when language was changed
      }
      App::setLocale($request->input('lan'));
    } else if (Auth::user()) {
      App::setLocale(Auth::user()->language);
    }

    return $next($request);
  }
}

然后在您的 App\Http\Kernel 类中注册中间件,以便为每个请求执行它:

protected $middleware = [
    //here go the other middleware classes
    'App\Http\Middleware\SetLang',
];

您可以在此处的文档中找到有关 中间件 的更多信息:http://laravel.com/docs/master/middleware

【讨论】:

  • 它的工作,但只是另一个小问题,为什么它保存没有这条线:Auth::user()-&gt;save(); 我想知道!
【解决方案2】:

似乎使用最新版本的 Laravel(我在 5.8 上)要让这个中间件工作,你需要将它放在 $middlewareGroups 下,否则对 Auth::user() 的调用总是空的。

jedrzej-kurylo 回答之后,只需将中间件移至:

protected $middlewareGroups = [
        'web' => [
                ...
                'App\Http\Middleware\SetLang',
        ],
];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多