美文网首页
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