我正在尝试建立一个多语言的Web应用程序。使用语言环境切换器中间件,我想使用诸如“ locale / ru”之类的Http请求来设置语言环境。然后作为区域设置会话变量集返回到当前页面。 (我还为后端控制面板设置了标准的laravel Auth。) 但是当发出请求时(通过URL或类似的东西),laravel将我重定向到身份验证登录页面,就像我试图到达需要身份验证的页面一样。 如果我尝试将该会话设置Http请求设置为已经登录的用户,则它将我重定向到默认的“您已登录”信息中心页面。
如果我将redirect-> back()替换为redirect-> route('landing');然后它的作品,但我不想为此功能设置一个恒定的页面。 我试图删除Auth :: routes();从Web路由中,我被重定向到正确设置的当前页面区域设置会话变量,但是我失去了laravel身份验证功能。
我的LanguageSwitcher中间件代码:
<?php
namespace App\Http\Middleware;
use Closure;
class SwitchLanguage
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
//Language switcher
if(\Session::has('locale'))
{
\App::setLocale(\Session::get('locale'));
}
//Language switcher ending!!
return $next($request);
}
}
我的网络路线:
<?php
// Route::get('/', function () {
// return view('front.anasayfa');
// });
//Language switcher
Route::get('locale/{locale}', function($locale){
Session::put('locale',$locale);
return redirect()->back();
});
Route::get('/','AnasayfaController@index')->name('landing');
Route::get('/haberler','NewsController@index');
Auth::routes();
Route::get('/dashboard', 'DashboardController@index');
我想通过url(例如“ locale / etc ....”)选择一种语言,然后重定向到当前页面,而不会干扰laravel auth。