Почему метод приложения 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'
];