Undefined переменная: ошибки - Laravel 5.2

Я новичок в Laravel и использую laravel версии 5.2.

Я создал контроллер и запрос с именем ArticlesController и CreateArticleRequest соответственно, и я определил некоторые правила проверки.

CreateArticleRequest

<?php

namespace App\Http\Requests;

use App\Http\Requests\Request;

class CreateArticleRequest extends Request
{
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            'title' => 'required|min:3',
            'body' => 'required|max:400',
            'published_at' => 'required|date',
        ];
    }
}

ArticlesController

<?php

namespace App\Http\Controllers;

use App\Article;
//use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use Carbon\Carbon;
use App\Http\Requests\CreateArticleRequest;

class ArticlesController extends Controller
{

    public function add(){
        return view('articles.add');
    }

    public function create_article_row(CreateArticleRequest $request){
        Article::create($request->all());
        return redirect('articles/');
    }
}

Когда я использую переменную $errors в моем шаблоне с именем add.blade.php, она показывает ошибку undefined: $errors Я попытался решить проблему, но я не сделал. Пожалуйста, скажите мне, где я ошибаюсь. add.blad.php

{{ var_dump($errors) }}

Нажмите здесь, чтобы увидеть изображение с ошибкой

Ответ 1

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

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

  • В вашем файле kernel.php (приложение/Http/Kernel.php) вы можете переместить middleware \Illuminate\View\Middleware\ShareErrorsFromSession::class обратно в свойство protected $middleware.

  • Оберните все ваши маршруты web группой маршрутов и примените к ним веб-промежуточное программное обеспечение:

    Route::group(['middleware' => 'web'], function() {
        // Place all your web routes here...(Cut all `Route` which are define in `Route file`, paste here) 
    });
    

Скопировано из этой записи Laravel 5.2 $ошибки, не появляющиеся в клике

Ответ 2

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

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

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

Ответ 3

Это происходит потому, что приведенный ниже файл не обновляется в процессе обновления композитора, поэтому не реализован метод mapWebRoutes.

app/Providers/RouteServiceProvider.php

Скопируйте этот файл из новой установки, и он будет работать. Лучше следуйте пути обновления в документах.

Ответ 4

Просто вырезайте все ваши маршруты из файла route.php и вставьте его между промежуточной группой "web", как это:

Файл маршрутов

Ответ 5

Для 5.2 просто переместите маршруты с переменной ошибки в группу промежуточного программного обеспечения

Ответ 6

С помощью этого кода вы можете ловить ошибки и отображать их:

@if ($errors->any())
 <div class='alert alert-danger'>
  @foreach ( $errors->all() as $error )
   <p>{{ $error }}</p>
  @endforeach
 </div>
@endif