Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Пытаюсь реализовать мултиязычность на сайте.
Локаль которую нужно показать получаю так
Route::get('setlocale/{locale}', 'HomeController@language');
public function language($locale){
if (in_array($locale, \Config::get('app.locales'))) { // Проверяем, если у пользователя выбран доступный язык
Session::put('locale', $locale); // Устанавливаем его в сессии под именем locale
}
return Redirect::back();
}
Если в blade вставить
{{\Session::get('locale')}}
, то получаю нужное значение (скажем ru)
А если в __construct вставить такой код
if (Session::get('locale') != null) {
$lang = Session::get('locale');
} else if (Session::get('locale') == null) {
$lang = "null";
}
View::share('lang', $lang);
, то получаю null. Ломаю голову, не могу понять почему !?
Естественно в контроллере подключены
use View;
use Session;
Помогите пожалуйста понять почему __construct не выдает значение Session::get('locale'). Спасибо заранее
Не в сети
я точно не знаю но чисто наугад могу предположить что конструктор отрабатывает до того как будет создан объект сессии и в \Session появятся какие-либо данные
проверить можно очень просто, если настроен отладчик. ставим одну точку останова в конструктор, а вторую – в /vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php в метод handle(). если первая сработает раньше второй, значит я угадал
Не в сети
я точно не знаю но чисто наугад могу предположить что конструктор отрабатывает до того как будет создан объект сессии и в \Session появятся какие-либо данные
Можно не проверять. Всё так и есть.
Начиная с версии 5.3, в конструкторе контроллера нельзя получить доступ к сессии и Auth::user() тоже, т.к. middlware еще не запустился.
Подобный вопрос на laracast https://laracasts.com/discuss/channels/ … onstructor
Об этом упоминается в документации здесь https://laravel.com/docs/5.3/upgrade#5. … nstructors
Еще больше про это написано здесь ну и костыль там же https://laravel-news.com/controller-con … aravel-5-3
Не в сети
Всем спасибо, решил так
public function __construct()
{
$this->middleware(function ($request, $next)
{
$this->lang = session()->has( 'locale' ) ? session()->get( 'locale' ) : [];
App::setLocale($this->lang);
return $next($request);
});
}
Не в сети
Страницы 1