美文网首页
Laravel 5.2 中 session::flash() 不

Laravel 5.2 中 session::flash() 不

作者: 洞房花猪 | 来源:发表于2017-11-07 10:57 被阅读143次

问题描述

之前用的5.2版本flash是可以正常使用,后来使用的新的laravel代码,把之前的代码复制过来之后,flash()不能用了,但是其他的set,put都可以正常使用。不知道是什么地方出了问题。

Route::group([
    'middleware' => 'web',
    'namespace' => 'Front'
], function () {
    //二手区首页
    Route::get('/', 'UsedController@index')
        ->name('used.index');

    //发布订单
    Route::get('used/publish', 'UsedController@publish')
        ->name('used.publish');
    
    Route::post('used/postPublish', 'UsedController@postPublish')
        ->name('used.post_publish');
});

路由文件中是这样写的。

public function postPublish(Request $request)
    {
        \Session::flash('end.message', '球队创建成功');
        \Session::flash('end.level', 'success');
        return redirect()->route('used.index');
    }

控制器中的代码如上。

解决方法

laravel 5.2 在某个版本升级中, 修改了 RouteServiceProvider , 更改了一个方法

public function map(Router $router)
{
    $this->mapWebRoutes($router);

    //
}

protected function mapWebRoutes(Router $router)
{
    $router->group([
        'namespace' => $this->namespace, 'middleware' => 'web',
    ], function ($router) {
        require app_path('Http/webRoutes.php');
    });
}

这是laravel给开发者做的一个示范 , 让我们知道http和api , 以及其它端可以加载不同的route文件来启动 . 这意味着laravel 可以有多个不同的bootstrap , 启动多个不同的kernel . 比如有HttpKernel , 还可以有RPCKernel或其它APIKernel , 每个Kernel 如同现在的Http 文件夹一样 ,拥有独立的路由文件 , 控制器 和中间件 . 这样就可以做到多端访问的资源隔离.

然而这个改动在RouteServiceProviders 里就把 'web' 中间件加载了 , 我从前面的版本过来 , 并不知道有这么一出. 中间件 Illuminate\Session\Middleware\StartSession 被启动了两次 .


参考文章

相关文章

网友评论

      本文标题:Laravel 5.2 中 session::flash() 不

      本文链接:https://www.haomeiwen.com/subject/jybdmxtx.html