为什么Laravel的App :: getLocale()方法不一致?

les*_*gar 6 php laravel

我在Laravel 5.2应用程序中使用了2种语言.我目前正在实施一个简单的密码提醒页面,由于我不知道的原因,我在使用正确的语言发送新密码电子邮件时遇到了问题.

假设我看到德语页面.在页面视图中,我使用Facades回显2个值:

echo App::getLocale();
echo Session::get('locale');
Run Code Online (Sandbox Code Playgroud)

该页面以德语提供,因此两个均为 echo de.

现在,我在表单中输入一个电子邮件地址并提交.输入到达控制器方法并调用库以向用户发送新密码:

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

    Mailer::sendNewPasswordEmail($user); // Call to the library sending emails
}
Run Code Online (Sandbox Code Playgroud)

最后,在库中,我var_dump相同的2个值,如下所示:

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

在这种情况下,Session::get('locale')仍然等于de,但App::getLocale()显示en.

为什么,为什么,为什么?

在我的电子邮件模板中,我正在使用Blade的@lang()指令.据我所知,该指令检查应用程序区域设置以确定要提供的转换.在我的情况下,电子邮件总是以英文发送,我不知道为什么App::getLocale()在视图中和我正在制作的下一个POST请求中返回不同的值.

这不是第一次发生这种情况,顺便说一下.有时看来,视图"了解"实际的应用程序区域设置,而不是控制器,模型或库.混乱.

想法?

Fra*_*ero 5

Laravel 5.2 App_Locale不是持久的.我发现使语言环境正常工作的唯一方法是创建一个调用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);
    }

}
Run Code Online (Sandbox Code Playgroud)

Kernel.php上注册您的中间件

protected $middleware = [
    .
    .
    .

   'App\Http\Middleware\Locale'
];
Run Code Online (Sandbox Code Playgroud)