Laravel 5.2 使用闪存数据重定向


Laravel 5.2 Redirect with Flash Data

我刚刚从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');
});

希望这有帮助!