Почему метод приложения Laravel:: getLocale () непоследователен?

я использую 2 языка в моем приложении Laravel 5.2. Существует простая страница напоминания пароля, которую я реализую в настоящее время, и по неизвестным мне причинам у меня проблемы с отправкой нового пароля на правильном языке.

предположим, я вижу страницу на немецком языке. В представлении страницы я повторяю 2 значения, используя фасады:

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

страница подается на немецком языке, так что и значения echo de.

теперь я ввожу электронное письмо обратитесь в форму и отправьте ее. Вход попадает в метод контроллера и вызывает библиотеку для отправки нового пароля пользователю:

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

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

наконец, в библиотеке я var_dump те же 2 значения, как это:

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

в этом случае Session::get('locale') все равно de, а App::getLocale() показывает en.

почему, почему, почему?

в моем шаблоне электронной почты я использую . Насколько мне известно, директива проверяет языковой стандарт приложения для определения перевода. В моем случае письмо отправляется всегда на английском языке, и я понятия не имею, почему App::getLocale() возвращает другое значение в представлении и во время следующего запроса POST, который я делаю.

это не первый раз, кстати. Иногда кажется, что представления "знают" больше о фактической локали приложения, чем контроллеры, модели или библиотеки. Запутанным.

идеи?

1 ответов


фреймворк 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);
    }

}

зарегистрируйте промежуточное ПО на ядра.в PHP

protected $middleware = [
    .
    .
    .

   'App\Http\Middleware\Locale'
];