2016-07-06 15 views
4

私はLaravel 5.2アプリで2つの言語を使用しています。私が現在実装している簡単なパスワードリマインダのページがあります。私にはわからない理由のため、新しいパスワードの電子メールを正しい言語で送信する際に問題があります。LaravelのApp :: getLocale()メソッドが矛盾しているのはなぜですか?

私はドイツ語でページを見ています。ページのビューでは、私はファサードを使用して、2つの値をエコー:

echo App::getLocale(); 
echo Session::get('locale'); 

をページがドイツ語で提供していますので、両方値はdeをエコー。

今、フォームにメールアドレスを入力して送信します。入力は、コントローラのメソッドに取得し、ユーザーに新しいパスワードを送信するためのライブラリを呼び出す:

public static function sendNewPasswordEmail($user) { 
    var_dump(App::getLocale()); 
    var_dump(Session::get('locale')); 
    die; 
} 

public function resetPassword() { 
    // Validate the input, retrieve the user...  

    Mailer::sendNewPasswordEmail($user); // Call to the library sending emails 
} 

は最後に、ライブラリに、私はこのように同じ2つの値を、のvar_dumpこの場合、Session::get('locale')はまだdeですが、App::getLocale()enです。

なぜ、なぜ、なぜですか?

私のメールテンプレートでは、Bladeの@lang()ディレクティブを使用しています。私が知る限り、ディレクティブはアプリケーションのロケールをチェックして、どの翻訳を行うかを決定します。私のケースでは、電子メールは常に英語で送信されています。なぜなら、App::getLocale()がビュー内で別の値を返し、次のPOSTリクエスト中に私が作成している理由を知りません。

これは初めてのことですが、btwです。コントローラ、モデル、またはライブラリよりも実際のアプリケーションのロケールについて、ビューが「知っている」と思われることが時々あります。混乱する。

アイデア?

答えて

4

Laravel 5.2 App_Localeは永続的ではありません。私はロケールがproperlly動作させるために見つけた唯一の方法は、Appを呼び出すミドルウェアを作成している::にsetLocale()このように:

<?php namespace App\Http\Middleware; 

use Closure; 
use Session; 
use App; 
use Config; 

class Locale { 

    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     App::setLocale(Session::get('locale')); 
     return $next($request); 
    } 

} 

Kernel.php

protected $middleware = [ 
    . 
    . 
    . 

    'App\Http\Middleware\Locale' 
]; 
+0

確かにあなたのミドルウェアを登録します私はこれを考慮しましたが、すべてのリクエストでアプリのロケールを設定することになりました。ロケールは、一度設定された後、別の値が使用されていない限り、その値を保持する必要があります。また、これを行う方法は、Sessionを使用して永続性を拒否する何かを設定するのではなく、カスタムSession変数に依存するほうがよいことを示唆しています。 – lesssugar

+0

あなたが解決策を見つけたら、それを共有してください...ありがとう。 –

+0

最後に、私はセッションとアプリケーションのロケールを同期させるためのよりよい方法を見つけることができませんでした。 – lesssugar

関連する問題