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?
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
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.
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.
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.
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.
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/
A noter également que si vous écrivez des tests et que votre variable view has $ errors, assurez-vous de ne pas utiliser WithoutMiddleware trait.
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. *
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.
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