2

私は多くのコントローラーを持っており、このすべて (実際にはすべてのプロジェクト) にこのコードを設定したいのですが、どうすればそれを行うことができますか?

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

2 に答える 2

2

そのためにLaravelのミドルウェアを使用できます。ミドルウェアは、リクエスト処理をラップするコード層であり、リクエストの処理前または処理後に追加のコードを実行できます。

まず、ミドルウェア クラスが必要です。目的のロジックを実行するhandle()というメソッドが 1 つ必要です。あなたの場合、次のようになります。

<?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のドキュメントを参照してください。

于 2015-08-02T11:10:29.863 に答える