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 (View: /var/www/resources/views/auth/register.lame.php) "

selon la documentation de Laravel, $errors doit toujours être positionné automatiquement:

donc, il est important de noter qu'une variable $ errors sera toujours disponible dans toutes vos vues sur chaque requête, vous permettant d'assumer commodément la variable $ errors est toujours définie et peut être utilisée en toute sécurité.

j'ai cela sur 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 façon lorsque je veux utiliser la variable $errors .

pourquoi? Je n'ai jamais eu ce problème avant.

quelqu'un Peut m'aider s'il vous plaît?

56
demandé sur Tom11 2015-12-24 17:12:40

10 réponses

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

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

dans cette rangée. Comparez ceci 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 $middleware tableau de propriétés

ou

à L'intérieur des routes.fichier php essayez de créer vos routes dans le bloc suivant

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

MISE À JOUR POUR LES NOUVELLES VERSIONS DE L'APPLICATION LARAVEL

soyez conscient que vous pourriez rencontrer des problèmes aussi dans le cas où vous utilisez web middleware deux fois. Il y a eu un changement dans L'application Laravel 5.2.27 (ne le confondez pas avec Laravel framework que vous utilisez actuellement - Vous pouvez utiliser Laravel framework par exemple 5.2.31 mais avoir L'application Laravel dans la version 5.2.24) dans laquelle web middleware est appliqué automatiquement pour toutes les routes. Ainsi, en cas de problèmes, vous devriez ouvrir votre fichier app/Providers/RouteServiceProvider.php et vérifier son contenu.

vous pouvez le comparer aussi ici :

dans le cas où vous avez une version plus récente (qui s'applique web middleware automatiquement), vous ne devriez pas utiliser web middleware dans routes.php plus ou vous devriez modifier votre RouteServiceProvider méthode pour ne pas appliquer web middleware de groupe. Sinon, si web middleware groupe est appliqué automatiquement dans ce fournisseur et vous l'utilisez aussi dans routes.php vous pourriez obtenir des résultats très inattendus.

94
répondu Marcin Nabiałek 2017-02-09 18:43:56

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

dans le fichier routes.php essayez de créer vos routes dans le fichier

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

déclaration.

19
répondu Felipe Peña 2016-01-23 20:55:13

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

mais

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

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

3
répondu Tom11 2016-02-20 18:15:10

je voyais cette erreur aussi et j'ai réalisé plus tard que j'avais utilisé le trait WithoutMiddleware comme un moyen de contourner l'authentification pour ce test particulier, mais il a fini par supprimer la liaison d'erreur de validation aussi. Donc j'ai dû arrêter d'utiliser le trait pour garder les vues de travail.

2
répondu Nikush 2016-01-02 12:17:57

Aller à App\Http\Noyau.php fichier. Déplacer toutes les choses de $middlewareGroups propriétés à $middleware .

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

2
répondu tisuchi 2016-04-25 14:09:46

aussi pour être au courant de: Si vous écrivez des tests et votre vue a variable $errors assurez-vous que vous n'utilisez pas WithoutMiddleware trait.

2
répondu Krzysztof Boduch 2016-05-19 11:53:42

count n'est pas vraiment réalisable puisqu'il suppose que la variable existe déjà. changez le contrôle de l'état en: @if($errors->has()) ou tout simplement @if($errors)

aussi si vous redirigez, assurez-vous de l'utiliser dans votre controller

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

EDIT: vu maintenant que vous êtes à l'aide de L5.2 Cela peut répondre à votre question - vous devez mettre vos itinéraires dans le groupe de Route.

Laravel 5.2 erreurs de validation

0
répondu Vojko 2017-05-23 11:47:05
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
répondu Amit Rai 2016-03-31 21:26:43

votre problème sera corrigé 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
répondu Asadullah Al Galib 2018-09-15 21:23:04

ce n'était pas en fait une erreur, c'était un avertissement que vous pouvez supprimer en utilisant la fonction php error_reporting ()

j'ai supprimé avertissement dans mon laravel 5.6 en utilisant

error_reporting (E_ALL ^ E_NOTICE);

plus de détails: http://php.net/manual/en/function.error-reporting.php

Espère que ça va vous aider, je vous remercie

-1
répondu Brijesh Hadiyal 2018-07-13 12:11:37