由于客户的需要,我不能使用本地化前缀。我正在尝试将区域设置数据存储到会话中,并根据该"区域设置"对路由进行分组。但我无法访问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官方文档