web-dev-qa-db-fra.com

Variable non définie: erreurs - Laravel 5.2

Je suis nouveau à Laravel et j'utilise la version 5.2 de Laravel.

J'ai créé un contrôleur et une requête nommés respectivement ArticlesController et CreateArticleRequest et j'ai défini des règles de validation.

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/');
    }
}

Lorsque j'utilise la variable $ errors dans mon modèle nommé add.blade.php, elle affiche une erreur variable non définie: $ errors J'ai essayé de résoudre le problème, mais je n'ai pas .Veuillez me dire où je me trompe .add.blad.php

{{ var_dump($errors) }}

 Click here to see Error Image

12

Il s’agit d’un problème majeur avec la mise à niveau 5.2. Ce qui se passe, c’est le middleware qui est responsable de rendre cette variable errors disponible pour toutes vos vues n’est pas utilisé car elle a été déplacée du middleware global au groupe de middleware web.

Il y a deux façons de résoudre ce problème:

  1. Dans votre fichier kernel.php (app/Http/Kernel.php), vous pouvez rétablir le middleware \Illuminate\View\Middleware\ShareErrorsFromSession::class dans la propriété protected $middleware.

  2. Enveloppez tous vos itinéraires web avec un groupe d’itinéraires et appliquez-leur le middleware Web:

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

Copié de cet article Laravel 5.2 $ erreurs n'apparaissant pas dans Blade

29
smartrahat

Poster ceci comme cela pourrait être utile pour les autres, 

Comme Praveen l'a mentionné dans la 1ère solution, dans votre fichier Kernel.php (app/Http/Kernel.php), déplacez \Illuminate\View\Middleware\ShareErrorsFromSession::class De $middlewareGroups vers la propriété protected $middleware, mais commence à générer l'erreur "Le magasin de session n'est pas défini sur demande" 

pour résoudre ce déplacement \Illuminate\Session\Middleware\StartSession::class, à $middleware property également.

4
Sambhav

Cela se produit parce que le fichier ci-dessous n'est pas mis à jour dans le processus de mise à jour de Composer et que la méthode mapWebRoutes n'est donc pas implémentée.

app/Providers/RouteServiceProvider.php

Copiez ce fichier depuis une nouvelle installation et cela fonctionnera. Mieux, suivez le chemin de mise à niveau sur la documentation.

2
SuperDuck

Il suffit de couper tous vos itinéraires à partir du fichier routes.php et de le coller entre les groupes de middleware 'web', comme ceci:

Fichier de routes

1
RobertP

Pour la version 5.2, déplacez simplement les routes contenant la variable errors vers le groupe de middleware

0
Koko