Laravel访问web.php内的会话数据
由于客户的需要,我无法使用本地化前缀。我试图将区域设置数据存储到会话中,并根据该“区域设置”对路由进行分组。但是我无法访问web.php中的会话数据Laravel访问web.php内的会话数据,php,laravel,Php,Laravel,由于客户的需要,我无法使用本地化前缀。我试图将区域设置数据存储到会话中,并根据该“区域设置”对路由进行分组。但是我无法访问web.php中的会话数据 $locale = Session::get('locale'); if($locale == 'tr') { Route::get('/kurumsal/{slug}', 'App\Http\Controllers\CorporateController@index')->name('corporate');
$locale = Session::get('locale');
if($locale == 'tr') {
Route::get('/kurumsal/{slug}', 'App\Http\Controllers\CorporateController@index')->name('corporate');
} elseif ($locale == 'eng){
Route::get('/corporate/{slug}', 'App\Http\Controllers\CorporateController@index')->name('corporate');
}
语言控制器中间件
class LanguageController extends Controller
{
public function index($locale = ''){
if ($locale == '') {
Session::put('locale', 'eng');
} else {
Session::put('locale', $locale);
}
return redirect()->back();
}
}
对于从会话获取数据,您可以使用
$value = $request->session()->get('your-key-name');
但是我不确定它在Web.php中是否有效。。!!但你们可以在控制器、中间件等更多的地方使用它
有关更多详细信息,请参见,以获取您可以使用的会话数据
$value = $request->session()->get('your-key-name');
但是我不确定它在Web.php中是否有效。。!!但你们可以在控制器、中间件等更多的地方使用它
有关详细信息,请参见如果没有冲突,则无需有条件地设置路由 以下几点效果不错:
Route::get('/kurumsal/{slug}', 'App\Http\Controllers\CorporateController@index')->name('corporate');
Route::get('/corporate/{slug}', 'App\Http\Controllers\CorporateController@index')->name('corporate');
如果您想限制访问非本地化路由,则您确实需要会话访问,但您可以通过以下方式进行访问:
然后,您需要在应用程序/Http/Kernel.php
中注册此区域设置:
// ...
protected $routeMiddleware = [
// ...
'locale_restricted' => LocaleRestricted::class
];
然后您可以将其用作:
$locale = Session::get('locale');
Route::middleware('locale_restricted:tr')->group(function () {
Route::get('/kurumsal/{slug}', 'App\Http\Controllers\CorporateController@index')->name('corporate');
});
Route::middleware('locale_restricted:eng')->group(function () {
Route::get('/corporate/{slug}', 'App\Http\Controllers\CorporateController@index')->name('corporate');
});
如果没有冲突,则不需要有条件地设置路由 以下几点效果不错:
Route::get('/kurumsal/{slug}', 'App\Http\Controllers\CorporateController@index')->name('corporate');
Route::get('/corporate/{slug}', 'App\Http\Controllers\CorporateController@index')->name('corporate');
如果您想限制访问非本地化路由,则您确实需要会话访问,但您可以通过以下方式进行访问:
然后,您需要在应用程序/Http/Kernel.php
中注册此区域设置:
// ...
protected $routeMiddleware = [
// ...
'locale_restricted' => LocaleRestricted::class
];
然后您可以将其用作:
$locale = Session::get('locale');
Route::middleware('locale_restricted:tr')->group(function () {
Route::get('/kurumsal/{slug}', 'App\Http\Controllers\CorporateController@index')->name('corporate');
});
Route::middleware('locale_restricted:eng')->group(function () {
Route::get('/corporate/{slug}', 'App\Http\Controllers\CorporateController@index')->name('corporate');
});
这比我想象的容易多了。顺便问一下,有没有办法根据我的路线设置语言环境?因为如果任何人只访问siteurl.com/corporate,他将看到土耳其语翻译,因为默认语言环境设置为“tr”。您可以在中间件中使用上述解决方案,但要执行
setLocale
,而不是执行abort
(请注意,$locale
是一个数组,因此您可能需要使用$locale[0]??“默认区域设置值”
(其中默认区域设置值是您希望的默认值,以防您在未指定的情况下使用中间件)嗯,这比我想象的要容易得多。顺便问一下,有没有办法根据我的路线设置语言环境?因为如果任何人只访问siteurl.com/corporate,他会看到土耳其语翻译,因为默认语言环境设置为“tr”。您可以在中间件上使用上述解决方案,但不要执行setLocale
,而是执行abort
(请注意,$locale
是一个数组,因此您可能需要使用$locale[0]??“默认区域设置值”
(其中默认区域设置值是您希望的默认值,以防在未指定的情况下使用中间件)