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

时间:2021-01-10 13:41:44

标签: php laravel

由于客户的需要,我无法使用本地化前缀。我正在尝试将语言环境数据存储到会话中,并根据该“语言环境”对我的路线进行分组。但我无法访问 web.php 中的会话数据。

$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();
    }

}

2 个答案:

答案 0 :(得分:1)

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

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

但我不确定它是否适用于 Web.php ..!!但是你可以在 Controller、Middelware 等更多地方使用这个。

有关详细信息,请参阅 Laravel Official Documentation

答案 1 :(得分:1)

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

以下工作正常:

Route::get('/kurumsal/{slug}', 'App\Http\Controllers\CorporateController@index')->name('corporate');
Route::get('/corporate/{slug}', 'App\Http\Controllers\CorporateController@index')->name('corporate');

如果您想限制访问非本地化路由,那么您确实需要会话访问权限,但您可以通过 middleware 获得,例如:

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}', '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');
});

相关问题