Laravel访问web.php中的会话数据



由于客户的需要,我不能使用本地化前缀。我正在尝试将区域设置数据存储到会话中,并根据该"区域设置"对路由进行分组。但我无法访问web.hp.中的会话数据

$locale = Session::get('locale');
if($locale == 'tr') {
Route::get('/kurumsal/{slug}', 'AppHttpControllersCorporateController@index')->name('corporate');
} elseif ($locale == 'eng){
Route::get('/corporate/{slug}', 'AppHttpControllersCorporateController@index')->name('corporate');
}

LanguageController中间件

class LanguageController extends Controller
{
public function index($locale = ''){
if ($locale == '') {
Session::put('locale', 'eng');
} else {
Session::put('locale', $locale);
}
return redirect()->back();
}
}

如果没有冲突,就不需要有条件地设置路由。

以下操作很好:

Route::get('/kurumsal/{slug}', 'AppHttpControllersCorporateController@index')->name('corporate');
Route::get('/corporate/{slug}', 'AppHttpControllersCorporateController@index')->name('corporate');

如果你想限制非本地化路由的访问,那么你确实需要会话访问,但你可以通过中间件进行访问,例如:

class LocaleRestricted {
public function handle($request, $next, ...$localesAllowed) {
if (!in_array(Session::get('locale'), $localesAllowed)) {
abort(404, 'This route is not available for this locale');
}
return $next($request);  
}
}

然后,您需要在app/Http/Kernel.php:中注册此区域设置

// ...
protected $routeMiddleware = [
// ...
'locale_restricted' => LocaleRestricted::class
];

然后您可以将其用作:

$locale = Session::get('locale');
Route::middleware('locale_restricted:tr')->group(function () {
Route::get('/kurumsal/{slug}', 'AppHttpControllersCorporateController@index')->name('corporate');
});
Route::middleware('locale_restricted:eng')->group(function () {
Route::get('/corporate/{slug}', 'AppHttpControllersCorporateController@index')->name('corporate');
});

对于从会话获取数据,您可以使用

$value = $request->session()->get('your-key-name');

但我不确定它在Web.php中是否有效。。!!但是你可以在控制器、中间件等更多的地方使用这个。

有关更多详细信息,请参阅Laravel官方文档