web-dev-qa-db-fra.com

Variable non définie: erreurs dans Laravel

Quand je veux enregistrer un utilisateur dans mon projet laravel, la page dit toujours 

Variable non définie: erreurs (Affichage: /var/www/resources/views/auth/register.blade.php) "

Selon la documentation de Laravel, $errors devrait toujours être automatiquement défini:

Il est donc important de noter qu'une variable $ errors sera toujours disponible dans toutes vos vues pour chaque demande, ce qui vous permettra de supposer que la variable $ errors est toujours définie et peut être utilisée en toute sécurité.

J'ai ceci sur chaque vue lorsque j'utilise:

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

ou de toute autre manière lorsque je veux utiliser la variable $errors.

Pourquoi est-ce? Je n'ai jamais eu ce problème avant.

Quelqu'un peut m'aider s'il vous plaît?

58
Anhinga

Assurez-vous que dans app/Http/Kernel.php dans middlewareGroups propriété pour web vous avez:

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

dans ce tableau. Comparez cela avec https://github.com/laravel/laravel/blob/master/app/Http/Kernel.php

MODIFIER

Il semble que vous ayez besoin d'ajouter 'middleware' => 'web' pour la route que vous utilisez ou de mettre \Illuminate\View\Middleware\ShareErrorsFromSession::class, dans le tableau de propriétés $middleware

ou

Dans le fichier routes.php, essayez de créer vos itinéraires dans le bloc suivant.

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

MISE À JOUR POUR LES NOUVELLES VERSIONS D'APPLICATION LARAVEL

Sachez que vous pouvez également rencontrer des problèmes si vous utilisez deux fois le middleware web. Il y avait un changement dans l'application Laravel 5.2.27 (ne le confondez pas avec le framework Laravel que vous utilisez actuellement - vous pouvez utiliser le framework Laravel pour l'exemple 5.2.31 mais avoir l'application Laravel dans la version 5.2.24) dans web middleware est appliqué automatiquement pour toutes les routes. Donc, en cas de problème, vous devriez ouvrir votre fichier app/Providers/RouteServiceProvider.php et vérifier son contenu.

Vous pouvez le comparer aussi ici:

Si vous possédez une version plus récente (qui applique le middleware web automatiquement), vous ne devez plus utiliser le middleware web dans routes.php ou modifier votre méthode RouteServiceProvider pour ne pas appliquer le middleware groupe web. Sinon, si le groupe de middleware web est automatiquement appliqué dans ce fournisseur et que vous l'utilisez également dans routes.php, vous risquez d'obtenir des résultats très inattendus.

100
Marcin Nabiałek

J'ai eu ce même problème avec Laravel 5.2.x. 

Dans le fichier routes.php, essayez de créer vos itinéraires dans le fichier 

Route::group(['middleware' => ['web']], function () {
    //routes here
}

déclaration.

19
Felipe Peña

J'ai eu un problème similaire et résolu celui-ci en ajoutant des routes dans un tableau de propriétés middleware,

MAIS 

cela n'a fonctionné qu'après avoir appelé php artisan route:cache (effacement du cache de la route) par la suite.

J'espère que certains d'entre vous trouveront cela utile.

3
Tom11

Je voyais aussi cette erreur et, plus tard, j'ai réalisé que j'avais utilisé le trait WithoutMiddleware comme moyen de contourner l'authentification pour ce test particulier, mais il a également fini par supprimer la liaison d'erreur de validation. J'ai donc dû cesser d'utiliser ce trait pour que les vues restent actives.

2
Nikush

Accédez au fichier App\Http\Kernel.php. Déplacez tous les éléments des propriétés $middlewareGroups vers $middleware.

Vérifiez pour plus de détails - http://www.tisuchi.com/laravel-5-2-undefined-variable-error-validation/

2
tisuchi

A noter également que si vous écrivez des tests et que votre variable view has $ errors, assurez-vous de ne pas utiliser WithoutMiddleware trait. 

2
Krzysztof Boduch

Votre problème sera résolu en utilisant cette méthode. 

Route::group(['middleware' => ['web']], function () {
        //routes should go here
});

Si cela ne vous aide pas, exécutez simplement la commande artisan suivante en plus du code ci-dessus:

php artisan key:generate

J'ai résolu de cette façon en utilisant 5.2. *

0
Asadullah Al Galib

count n'est pas vraiment réalisable puisqu'il suppose que la variable existe déjà. remplacez la vérification de l'état par: @if($errors->has()) ou juste @if($errors)

Aussi, si vous redirigez, assurez-vous de l'utiliser dans votre contrôleur

return redirect()->back()->with('errors', $validator->messages());

EDIT: vu maintenant que vous utilisez L5.2 Cela peut répondre à votre question - vous devez mettre vos itinéraires dans le groupe Itinéraires.

Erreurs de validation Laravel 5.2

0
Vojko
protected $middleware = [              \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    \Social\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \Social\Http\Middleware\VerifyCsrfToken::class,
];

/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [

    ],

    'api' => [
        'throttle:60,1',
    ],
];

/**
 * The application's route middleware.
 *
 * These middleware may be assigned to groups or used individually.

faites ressembler votre noyau à ceci

0
Amit Rai