我正在尝试使用会话实现Flash消息,但我无法这样做。
在我的控制器中我有:
public function store(Request $request) {
session()->flash('donald', 'duck');
session()->put('mickey', 'mouse');
return redirect()->action('CustomerController@index')->with('bugs', 'bunny');
}
但是当我在视图中检查会话变量时,我只能看到session()->put('mickey', 'mouse')
中的值。
会话:
{"_token":"F6DoffOFb17B36eEJQruxvPe0ra1CbyJiaooDn3F","_previous":{"url":"http:\/\/localhost\/customers\/create"},"flash":{"old":[],"new":[]},"mickey":"mouse"}
很多人在网络中间件中没有相关路线时遇到了这个问题。我确保这样做但它仍然无法工作。
在routes.php中:
Route::group(['middleware' => ['web']], function () {
Route::get('/', function () {
return view('welcome');
});
Route::get('/customers', 'CustomerController@index');
Route::get('/customers/create', 'CustomerController@create');
Route::post('/customers', 'CustomerController@store');
});
在Kernel.php中:
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
],
'api' => [
'throttle:60,1',
],
];
有谁能让我知道我在这里做错了什么?谢谢!
答案 0 :(得分:29)
通过替换
解决了问题127.0.0.1
与
Route::group(['middleware' => ['web']], function () {
...
});
当所有文档都显示我们使用Route::group(['middlewareGroups' => ['web']], function () {
...
});
答案 1 :(得分:5)
这很可能是因为对Laravel框架(v5.2.27)进行了更改,默认情况下所有路由都是“web”中间件的一部分,因此在routes.php文件中再次分配它最终会分配两次。
解决方案是从路由中删除“web”中间件或从RouteServiceProvider中删除自动分配。
在Laravel更新之前:
// RouteServiceProvider.php
$router->group(['namespace' => $this->namespace], function ($router) {
require app_path('Http/routes.php');
});
Laravel更新后:
// RouteServiceProvider.php
$router->group([
'namespace' => $this->namespace, 'middleware' => 'web',
], function ($router) {
require app_path('Http/routes.php');
});
请注意新更新如何自动将“web”中间件应用于所有路由。如果您希望像以前一样继续使用Laravel 5.2,请在此处将其删除(在您的routes.php中手动分配“web”中间件)。
答案 2 :(得分:2)
使用以下代码构建会话Flash信息:
<?php
Session::flash("Donald", "Duck")
// Or in your code style.
$request->session()->flash("Donald", "Duck")
?>
在视图中查看:
@if(Session::has("Donald")
{{Session::get("Donald")}}
@endif
你忘了使用$ request:)
答案 3 :(得分:1)
在控制器中:
use Session,Redirect;
public function store(Request $request)
{
Session::flash('donald', 'duck');
Session::put('mickey', 'mouse');
return Redirect::to('/customers')->with('bugs', 'bunny');
}
在“查看”中检查数据是否正常:
<?php
print_r($bugs);die;
?>
祝你好运:)
答案 4 :(得分:1)
我使用以下内容:
在我的控制器中:
public function xyz(){
// code
// This
return redirect()->action('homeController@index')->with('success', 'Check! Everything done!');
// Or this
return redirect('/index')->with('success', 'Check! Everything done!');
}
在我看来:
@if(session('success'))
{{ session('success') }}
@endif
没有别的。 Web中间件被分配给每个路由。
答案 5 :(得分:1)
我不知道为什么但是在Windows上你需要改变你的路线:中间件到中间件组,就像那样:
因此,在你的app \ Kernel.php中,你需要将StartSession放在中间件组web的数组上: