Ошибка Laravel 5.2 $, не появляющаяся в Blade

Поэтому я следую инструкциям по основам Laravel 5, и я придерживаюсь проверки формы. Я внимательно следил за учебником, но получаю неопределенную переменную: ошибки в моем представлении статей.

В учебном пособии, за которым я слежу, и что я нашел в Интернете, они говорят, что переменная ошибок всегда присутствует в файле кликов для использования, поэтому я не знаю, что я делаю неправильно?

Любая помощь будет оценена! любящий Laravel, за исключением этой ошибки!

View @if($errors->any()) <ul class="alert alert-danger"> @foreach($errors->any() as $error) <li>{{$error}}</li> @endforeach </ul> @endif 

контроллер

 <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\User; use App\Http\Requests; use App\Http\Requests\UserRequest as UserRequest; // use App\Http\Requests\CreateArticleRequest as CreateArticleRequest; use App\Http\Controllers\Controller; use Illuminate\View\Middleware\ErrorBinder; class UserController extends Controller { public function create(){ return view('pages.signUp'); } public function store(UserRequest $request){ User::create($request->all()); return 'the user has been registered!'; return view('user.profile'); } } 

Проверка запроса

 <?php namespace App\Http\Requests; use App\Http\Requests\Request; class UserRequest extends Request { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'name' => 'required', 'email' => 'required|email', 'country' => 'required', 'password' => 'required|min:6', 'confirm_password' => 'required|same:password', 'height' => 'required', 'weight' => 'required', ]; } } 

Это проблема с обновлением 5.2. То, что происходит, – это промежуточное программное обеспечение, которое отвечает за то, чтобы переменная errors доступная ко всем вашим представлениям, не использовалась, поскольку она была перенесена из глобального промежуточного программного обеспечения в группу промежуточного программного обеспечения.

Есть два способа исправить это:

  1. В файле kernel.php вы можете переместить промежуточное ПО \Illuminate\View\Middleware\ShareErrorsFromSession::class обратно в свойство protected $middleware объекта protected $middleware .

  2. Вы можете объединить все свои веб-маршруты с группой маршрутов и применить к ним web промежуточное программное обеспечение.

     Route::group(['middleware' => 'web'], function() { // Place all your web routes here... }); 

решаемая

Вы можете изменить любое из следующих действий:

1. поместите свой рабочий маршрут (app/http/routes.php) на

Route::group(['middleware' => ['web']], function () { // Here like Route::get('/', 'TodoController@index'); Route::post('/', 'TodoController@store'); });

Скриншот –

Screendshot 1

2. Переместите protected $middlewareGroups web (app/Http/Kernel.php) на protected $middleware = []

Скриншот –

screenshot2

Это решение:

Измените защиту групп маршрутов промежуточным программным обеспечением :

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

в

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

Источник: https://github.com/laravel/framework/issues/13000

просто, вам нужно двигаться:

 \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, 

от protected $middlewareGroups до protected $middleware

  1. Просто удалите , 'middleware' => 'web' из Route::group(array('prefix' => 'user', 'middleware' => 'web'), function() на странице route.php OR

  2. Переехать

    \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class,

От protected $middlewareGroups до protected $middleware на странице karnel.php

Как пишет Laravel Documentation:

Примечание. Если в вашей копии Laravel есть RouteServiceProvider, который уже содержит файл маршрутов по умолчанию в группе промежуточного программного обеспечения, вам не нужно вручную добавлять группу в файл route.php.

Поэтому удаление из файла routes.php будет правильным.

Проводя это, поскольку это может быть полезно для других,

Как указано в 1-м решении Kernel.php , в вашем файле Kernel.php ( app/Http/Kernel.php ) переместите \Illuminate\View\Middleware\ShareErrorsFromSession::class из $middlewareGroups в protected $middleware свойство protected $middleware , но оно начнет бросать ошибка «Хранилище сеансов не установлено по запросу»,

для разрешения этого перехода \Illuminate\Session\Middleware\StartSession::class, в $middleware property .

Начиная с 5.2, routes.php по умолчанию уже вызывается в контексте ['middleware'=>'web'] помощью RouteServiceProvider . Но при генерации маршрутов auth маршрутов по умолчанию routes.php умолчанию по-прежнему происходит Route::group вызов Route::group поэтому, если вы удалите это объявление Route::group из routes.php приложение корректно отображает ошибки.

Несколько замечаний по этому вопросу. Во-первых, связанная ошибка в github по этой проблеме PFA https://github.com/laravel/framework/issues/12022

Если вы посмотрите на последний комментарий, который написал Грэм, я думаю, что это лицо, с которым я столкнулся. Для меня, несмотря на то, что в сообщениях формы были ошибки, я получал следующее равенство

 boolval(count($errors) === 0) === true 

В моем случае я добавил записи журнала в

 \Illuminate\Session\Middleware\StartSession::class 

вышеупомянутый класс промежуточного программного обеспечения выполнялся дважды для данного запроса, я не уверен, почему он работал дважды, но я думаю, из-за этого переменная $errors получает сброс. Я использовал эту конфигурацию (которая, я думаю, по умолчанию была отключена Laravel @ 5.2.43)

 protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, ]; 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', ], ]; protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, ]; 

Я изменил конфигурацию, которая сработала для меня, и количество переменных $errors не равно нулю (также указанное промежуточное ПО запускалось только один раз за запрос)

 protected $middleware = [ \Illuminate\Session\Middleware\StartSession::class, \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, ]; protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, ], 'api' => [ 'throttle:60,1', ], ]; protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, ]; 

Примечание. Все мои маршруты находятся в группе промежуточного программного обеспечения web до и после изменения конфигурации Kernel.php, я вообще не перемещал свои маршруты из группы промежуточного программного обеспечения.

Измените @foreach($errors->any() as $error) на @foreach($errors->all() as $error)

в этом случае laravel 5.2 вы можете ссылаться на код примера и редактировать файл kernal.php . переместите этот \Illuminate\View\Middleware\ShareErrorsFromSession::class middlewareGroups для middleware middlewareGroups middleware и добавьте \Illuminate\Session\Middleware\StartSession::class , в middleware затем его работу корректно.

Имея требования к Web и API в нашем приложении, мы не хотели перемещать промежуточное ПО; возможно, это сработало бы:

У нас была очень странная ситуация, что данные сеанса flash[] и $errors были правильно переданы между стандартными методами ресурса laravel, store() и edit() , но в некоторых случаях данные не возвращались к почти идентичным методам, storeSale() и editSale() .

Мы обнаружили, что в наших средах разработки и развертывания во всех случаях работали драйверы «файл» и «база данных», но драйвер «cookie» этого не делал.

Переключение на драйвер базы данных во всех случаях решило проблему.