Я новичок в 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 variable: $ errors Я пытался решить проблему, но не смог. Скажите, где я ошибаюсь. add.blad.php

{{ var_dump($errors) }}

Click here to see Error Image

12
Muhammad Asif Saleem 26 Дек 2015 в 21:51

6 ответов

Лучший ответ

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

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

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

  2. Оберните все свои маршруты 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 $ не появляются в Blade

30
Community 23 Май 2017 в 12:00

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

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

Разрешить этот ход \Illuminate\Session\Middleware\StartSession::class, в $middleware property.

4
Sambhav Pandey 9 Фев 2016 в 08:03

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

@if ($errors->any())
 <div class='alert alert-danger'>
  @foreach ( $errors->all() as $error )
   <p>{{ $error }}</p>
  @endforeach
 </div>
@endif
-1
Kokno 26 Дек 2015 в 19:12

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

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

1
Mark Amery 24 Янв 2016 в 15:50

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

0
Robert 26 Фев 2016 в 10:30

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

app/Providers/RouteServiceProvider.php

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

2
SuperDuck 31 Мар 2016 в 14:26