【发布时间】:2016-02-26 23:56:08
【问题描述】:
在我使用的每个控制器和 routes.php 之上:
use Illuminate\Support\Facades\Session;
在 routes.php 中,我使用以下方式设置会话:
Session::put('key', 'value');
在控制器中我想调用key 的会话值:
echo Session::get('key');
但是一旦我在 routes.php 中为key 设置了一个新值并在控制器中调用它,我仍然会得到第一个值而不是新值。如果我在设置后在 routes.php 中使用Session::all() 回显会话,我会看到新值,但在控制器中它会翻转回第一个值。在设置新值之前,我什至尝试在 routes.php 中使用 below,但没有成功。
Session::forget('key');
我是不是忘记了什么?
使用常规 PHP $_SESSION 我的 routes.php 看起来像这样:
$slug = $_SERVER['REQUEST_URI'];
$slug = explode('/', $slug[0]);
if(in_array($slug[1], Language::all()->lists('iso'))) {
$_SESSION['language'] = $slug[1];
if(!$slug[2]) {
$_SESSION['slug'] = 'home';
Route::any('/{slug}', ['as' => 'pages.page', 'uses' => 'PagesController@page']);
} else {
if($slug[2] != 'dashboard' && $slug[2] != 'migrate' && $slug[2] != 'form-send') {
if (in_array($slug[2], ElementValue::where('element_field_id', 2)->lists('value_char')) && !isset($slug[3])) {
$_SESSION['slug'] = $slug[2];
Route::any('/{slug}', ['as' => 'pages.page', 'uses' => 'PagesController@page']);
} else {
$_SESSION['slug'] = 'home';
Route::any('/{slug}', ['as' => 'pages.page', 'uses' => 'PagesController@page']);
}
}
}
}
【问题讨论】:
-
为什么要在 route.php 中设置会话,然后在控制器中使用该值?如果您使用控制器,则应在控制器或中间件中设置任何会话值。
-
也发布您的 routes.php 代码
-
刚刚在我的问题中添加了路线部分
-
嗯看起来很'un-laravel'。我建议通过文档并做一些教程。 Routes.php 在 laravel 中不应该是这样的。许多更好的方法来做到这一点,比如在使用 Request 类的中间件中