我刚刚从4.2升级到Laravel 5.2以尝试框架的新功能。但是我在设置要在其他控制器/路由上发送flash session
数据时遇到问题。
这是我的简单代码:
控制器
<?php namespace App'Http'Controllers;
use Session;
use Illuminate'Http'Request;
class ctest extends Controller {
public function page_a() {
return redirect('page_b')->with('verified', 'Go to page B');
}
public function page_b(Request $request) {
dd(array(
session()->has('verified'), // Option a
$request->session()->get('verified') // Option b
));
}
}
路线
// Old code
// Route::get('/page_a', 'ctest@page_a');
// Route::get('/page_b', 'ctest@page_b');
// As pointed out by @rishal at the comment,
// I tried using this group but I can't still get
// the flash data.
Route::group(['middleware' => ['web']], function () {
Route::get('/page_a', 'ctest@page_a');
Route::get('/page_b', 'ctest@page_b');
});
page_b的结果
array: [
0 => false
1 => null
]
我不知道这有什么问题。每当我被重定向到page_b时,会话仅包含 _token
,不包括我已经在page_a上设置的verified
闪存会话数据。
PS:我正在使用数据库来存储会话而不是文件
首先,
您需要对路由进行分组,以便在重定向页面后获取会话变量
Route::group(['middleware' => ['web']], function () {
Route::get('/page_a', 'ctest@page_a');
Route::get('/page_b', 'ctest@page_b');
});
接下来,使用请求检索会话
public function page_b(Request $request) {
if ($request->session()->has('verified'))
echo $request->session()->get('key');
}
在你的page_a这一行
return redirect('page_b')->with('verified', 'Go to page B');
不创建会话变量,它创建值为"转到页面 B"的$verified
。相反,您可以使用以下方法创建会话变量
$request->session()->put('key', 'value');
尝试将"中间件"替换为"中间件组",如下所示:
Route::group(['middlewareGroups' => ['web']], function () {
Route::get('/page_a', 'ctest@page_a');
Route::get('/page_b', 'ctest@page_b');
});
希望这有帮助!