【问题标题】:Laravel 5.2 Redirect with Flash DataLaravel 5.2 使用 Flash 数据重定向
【发布时间】:2016-08-23 23:40:37
【问题描述】:

我刚刚从 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 flash 会话数据。

PS:我正在使用数据库来存储会话而不是文件

【问题讨论】:

  • 您是否尝试对您的路线 Route::group 进行分组
  • 还没有。我需要这样做吗?为什么? :D 对不起。我是 5.2 的新手
  • 兄弟我试过了,还是一样
  • 根据 laravel doc laravel.com/docs/5.2/session 您使用请求检索会话,例如。 $request->session()->get('key');

标签: php laravel session laravel-5.2


【解决方案1】:

尝试用“middlewareGroups”替换“middleware”,如下所示:

Route::group(['middlewareGroups' => ['web']], function () {
    Route::get('/page_a', 'ctest@page_a');
    Route::get('/page_b', 'ctest@page_b');
});

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    首先,您需要在重定向页面后对路由进行分组以获取会话变量

    Route::group(['middleware' => ['web']], function () {
        Route::get('/page_a', 'ctest@page_a');
        Route::get('/page_b', 'ctest@page_b');
    });
    

    接下来,使用 Request 检索会话

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

    不创建会话变量,它创建$verified,其值为'Go to page B'。相反,您可以使用

    创建会话变量
    $request->session()->put('key', 'value');
    

    【讨论】:

    • 对不起,我忘了在我的问题中包括我使用数据库来存储会话而不是文件。它会影响行为吗?
    • 你的意思是影响行为?它是否有效?
    猜你喜欢
    • 2016-12-30
    • 2016-07-16
    • 2016-09-01
    • 2013-10-06
    • 2016-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    相关资源
    最近更新 更多