#php #laravel
#php #laravel
Вопрос:
Основная информация :
Использование Laravel 7.29.3
Для всех моих маршрутов требуется язык, основанный на выбранном пользователем языке. Допустимый URL-адрес выглядит следующим образом www.test.com/en/home например
Ситуация :
Пользователь открыл мой веб-сайт на двух вкладках: Tab1 и Tab2. Один и тот же веб-сайт на обеих вкладках.
Он входит в систему с помощью Tab1 и проходит проверку подлинности. Затем он нажимает кнопку входа в Tab2. Laravel понимает, что пользователь уже прошел проверку подлинности, и перенаправляет пользователя на www.test.com/home .
Проблема в том, что www.test.com/home в нем нет никакой локали, и он недействителен. Пользователь получает ошибку 404.
В Laravel LoginController есть переменная
protected $redirectTo = RouteServiceProvider::HOME;
Но как мне получить там текущую языковую локаль? Я знаю функцию
app()-> getLocale(), но когда я пытаюсь
protected $redirectTo = app()->getLocale() . RouteServiceProvider::HOME;
Я получаю сообщение об ошибке
Constant expression contains invalid operations
Я уже добавил следующую функцию в свой LoginController, но Laravel игнорирует ее в вышеупомянутой ситуации с двумя вкладками.
protected function redirectTo()
{
return app()->getLocale() . '/home';
}
Итак, как я могу получить текущую выбранную локаль / язык в redirectTo?
protected $redirectTo = RouteServiceProvider::HOME;
Заранее спасибо
Ответ №1:
Это мой первый ответ, поэтому извините, если это вам не поможет, но я думаю, что в laravel 7 у вас есть метод, расположенный в AuthenticatesUsers, который называется authenticated() это может помочь вам выполнить желаемое действие после входа пользователя в систему или просто создать метод redirectPath() в вашем контроллере для переопределенияэто из RedirectsUsers, если функция redirectTo() не запущена.
Комментарии:
1. Спасибо за быстрый ответ. Я добавил следующие функции в свой LoginController, но все равно получаю сообщение об ошибке public function authenticated() { return redirect(route(‘home’, app()->getLocale())); } общедоступная функция redirectPath(){ return redirect(route(‘home’, app()->getLocale())); }
2. Попробуйте это и удалите общедоступную функцию authenticated() redirectPath() { return app()-> getLocale() . ‘/home’; }. Я только что попробовал функцию на моем logincontroller и перенаправляет пользователя на www.example.com/en/home . Функция redirectPath() должна возвращать желаемый URL. Если вы проверите свой sendLoginResponse(), вы увидите, что он уже вызван redirect() , вам не нужно вызывать его снова.
3. ‘code’ общедоступная функция redirectPath() { return app()->getLocale() . ‘/home’; } ‘код’
4. Я нашел проблему. Мне пришлось отредактировать промежуточное программное обеспечение RedirectIfAuthenticated.php . Я заменил строку return redirect(RouteServiceProvider::HOME); на return redirect(route(‘home’, app()-> getLocale())); Теперь это работает.
5. ДА. Я плохо прочитал ваш вопрос. Проблема возникла не при входе пользователя в систему, а когда пользователь уже вошел в систему. Я вижу. Мой плохой. Я рад, что вы решили свою проблему.