Подтвердить что ты не робот

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

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

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

Любая помощь будет оценена! любящий 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',
        ];
    }
}
4b9b3361

Ответ 1

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

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

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

  • Вы можете объединить все свои веб-маршруты с группой маршрутов и применить к ним связующее ПО web.

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

Ответ 2

решаемые

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

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

Route::group(['middleware' => ['web']], function () { // Here like Route::get('/', '[email protected]'); Route::post('/', '[email protected]'); });

Снимок экрана -

Screendshot 1

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

Снимок экрана -

screenshot2

Ответ 3

Это решение:

Измените защиту групп маршрутов на промежуточное ПО, от:

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

к

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

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

Ответ 4

просто вам нужно переместить:

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

от protected $middlewareGroups до protected $middleware

Ответ 5

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

  • Переместить

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

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

Как пишет Laravel Documentation:

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

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

Ответ 6

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

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

чтобы решить этот ход \Illuminate\Session\Middleware\StartSession::class, до $middleware property.

Ответ 7

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

Ответ 8

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

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

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

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

\Illuminate\Session\Middleware\StartSession::class

вышеуказанный класс промежуточного программного обеспечения выполнялся дважды для данного запроса, я не уверен, почему он работал дважды, но я думаю, из-за этого переменная $errors получает reset. Я использовал эту конфигурацию (которая, как мне кажется, по умолчанию была с 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, я вообще не перемещал свои маршруты из группы промежуточного программного обеспечения web.

Ответ 9

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

Ответ 10

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

Ответ 11

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

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

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

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