Intereting Posts

Laravel 5.2 Вспышка сеанса не работает даже с веб-промежуточным программным обеспечением

Я пытаюсь внедрить флэш-сообщения с использованием сеансов, но не могу этого сделать.

В моем контроллере у меня есть:

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', ], ]; 

Может ли кто-нибудь сообщить мне, что я могу делать неправильно здесь? Благодаря!

Исправлена ​​проблема путем замены

 Route::group(['middleware' => ['web']], function () { ... }); 

с

 Route::group(['middlewareGroups' => ['web']], function () { ... }); 

Не знаю, почему это работает, хотя, когда вся документация предполагает, что мы используем ['middleware' => ['web']]

Это более чем вероятно из-за изменений, внесенных в структуру Laravel (v5.2.27), что все маршруты по умолчанию являются частью промежуточного программного обеспечения «сети», поэтому назначение его снова в файле routes.php приводит к его удвоению ,

Решение заключается в том, чтобы удалить «веб-» промежуточное программное обеспечение с ваших маршрутов или удалить автоматическое назначение из 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'); }); 

Обратите внимание, как новое обновление автоматически применяет «сетевое» промежуточное ПО ко всем маршрутам. Просто удалите его здесь, если вы хотите продолжить использование Laravel 5.2, как и раньше, (вручную назначая «промежуточное ПО» в ваших маршрутах.php).

Создайте флеш-информацию Session, используя этот код:

 <?php Session::flash("Donald", "Duck") // Or in your code style. $request->session()->flash("Donald", "Duck") ?> 

Проверьте это в своем представлении с помощью:

 @if(Session::has("Donald") {{Session::get("Donald")}} @endif 

Вы забыли использовать $ request 🙂

В контроллере:

 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; ?> 

Удачи 🙂

Я использую следующее:

В моем контроллере:

 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 

Ничего больше. Веб-промежуточное ПО назначается каждому маршруту.

Я не знаю, почему, но в Windows вам нужны изменения в ваших маршрутах: промежуточное ПО и middlewareGroups, например:

изменить промежуточное ПО на middlewareGroups

Итак, в вашем приложении \ Kernel.php вам нужно сначала поставить StartSession на массив промежуточной группы:

сначала поставить StartSession на массив промежуточной группы