問題描述
之前用的5.2版本flash是可以正常使用,后來使用的新的laravel代碼,把之前的代碼復(fù)制過來之后,flash()不能用了,但是其他的set,put都可以正常使用。不知道是什么地方出了問題。
Route::group([
'middleware' => 'web',
'namespace' => 'Front'
], function () {
//二手區(qū)首頁
Route::get('/', 'UsedController@index')
->name('used.index');
//發(fā)布訂單
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', '球隊創(chuàng)建成功');
\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給開發(fā)者做的一個示范 , 讓我們知道http和api , 以及其它端可以加載不同的route文件來啟動 . 這意味著laravel 可以有多個不同的bootstrap , 啟動多個不同的kernel . 比如有HttpKernel , 還可以有RPCKernel或其它APIKernel , 每個Kernel 如同現(xiàn)在的Http 文件夾一樣 ,擁有獨立的路由文件 , 控制器 和中間件 . 這樣就可以做到多端訪問的資源隔離.
然而這個改動在RouteServiceProviders 里就把 'web' 中間件加載了 , 我從前面的版本過來 , 并不知道有這么一出. 中間件 Illuminate\Session\Middleware\StartSession 被啟動了兩次 .