49

Quando voglio registrare un utente nel mio progetto laravel, la pagina dice sempreVariabile non definita: gli errori in laravel

Undefined variable: errors (View: /var/www/resources/views/auth/register.blade.php)"

Secondo la documentazione laravel, $errors dovrebbe sempre essere impostato automaticamente:

So, it is important to note that an $errors variable will always be available in all of your views on every request, allowing you to conveniently assume the $errors variable is always defined and can be safely used.

ho questo su su ogni vista quando uso:

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

o qualsiasi altro modo quando voglio usare la variabile $errors.

Perché è questo? Non ho mai avuto questo problema prima.

Qualcuno può aiutarmi per favore?

+0

Quale versione di Laravel? Nello specifico, nel tuo file 'composer.lock', quale versione sta tirando? –

+0

"version": "v5.2.3" – Anhinga

+0

Interessante. Non ho ancora incasinato il 5.2, ma posso vedere chiaramente nella documentazione quello che stai dicendo. Potrebbe esserci un bug in 5.2? https://laravel.com/docs/5.2/validation –

risposta

82

Si dovrebbe fare in modo che in app/Http/Kernel.php in middlewareGroups immobili per web avete:

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

in questo array. Confronta questo con https://github.com/laravel/laravel/blob/master/app/Http/Kernel.php

EDIT

Sembra che è necessario aggiungere 'middleware' => 'web' per percorso che si sta utilizzando o mettere \Illuminate\View\Middleware\ShareErrorsFromSession::class, in $middleware proprietà di matrice

o

All'interno dei percorsi. file php tenta di creare i percorsi all'interno del seguente blocco

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

AGGIORNAMENTO PER nuove versioni delle laravel APPLICAZIONE

Essere consapevoli del fatto che si potrebbe incorrere in problemi anche nel caso in cui si utilizza il middleware web due volte. C'è stato un cambiamento nell'applicazione Laravel 5.2.27 (non confonderlo con il framework Laravel che si usa al momento - si potrebbe usare il framework Laravel ad esempio 5.2.31 ma avere l'applicazione Laravel nella versione 5.2.24) in cui web il middleware viene applicato automaticamente per tutti i percorsi. Pertanto, in caso di problemi, è necessario aprire il file app/Providers/RouteServiceProvider.php e verificarne il contenuto.

si può paragonare anche qui:

Nel caso in cui si dispone di versione più recente (che si applica web middleware automaticamente), non si dovrebbe utilizzare il middleware web in oppure modificare il proprio 012 Metodonon applicabile al middleware di gruppo web.Altrimenti, se il gruppo di middleware web viene applicato automaticamente in questo provider e lo si utilizza anche in routes.php, si potrebbero ottenere risultati molto inaspettati.

+0

È già lì dentro ... Copia-incolla l'intero blocco per essere sicuro, ma non funziona ancora – Anhinga

+0

Hai aggiornato l'app dalla versione precedente di Laravel o hai avviato la nuova app da zero in Laravel 5.2? –

+0

Avviato da zero tramite scotchbox – Anhinga

0

il conteggio non è realmente realizzabile poiché presuppone che la variabile esista già. cambiare l'assegno condizione: @if($errors->has()) o semplicemente @if($errors)

anche se si reindirizzano assicurarsi di utilizzare questo nel vostro controller

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

EDIT: visto ora che si sta utilizzando L5.2 Questo può rispondere alla tua domanda: è necessario inserire i percorsi nel gruppo Percorso.

Laravel 5.2 validation errors

+0

i tuoi suggerimenti assumono anche che la variabile esiste ... –

+0

No, verifica l'esistenza MODIFICA: se stai parlando del mio suggerimento del controller, quella parte è solo se per esempio - la validazione fallisce. – Vojko

+0

non proprio ... dove controlla l'esistenza? $ errors-> ha()? si presuppone che esistano variabili $ errori –

19

ho avuto questo stesso problema con laravel 5.2.x.

All'interno del file routes.php provare yo creare i percorsi all'interno dell'istruzione

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

.

+1

Sì, era lo stesso problema anche per me. Avevo creato il percorso home ('/') al di fuori del middleware 'web' – gthuo

2

Stavo vedendo questo errore e in seguito ho realizzato che avevo utilizzato il tratto WithoutMiddleware come mezzo per ignorare l'autenticazione per questo particolare test, ma alla fine ho eliminato anche il binding dell'errore di convalida. Quindi ho dovuto smettere di usare il tratto per mantenere il funzionamento delle viste.

+0

Grazie, anche questo era il mio problema. Hai trovato una soluzione per testare cose che ha sia la variabile di errore che ha bisogno anche di 'WithoutMiddleware'? – Fanmade

+1

@Fanmade Purtroppo non l'ho fatto. Nei miei test ho appena creato un utente e li ho registrati per ogni test. Fortunatamente laravel lo rende possibile con un codice molto piccolo, quindi non mi dispiace. – Nikush

3

Ho avuto un problema simile e risolto questo aggiungendo percorsi in matrice di proprietà middleware pure,

MA

funzionava solo dopo la chiamata php artisan route:cache (cache percorso di compensazione) successivamente.

Spero che alcuni di voi lo trovino utile.

+0

Cosa? La cache deve essere cancellata, per fare in modo che il middleware funzioni bene. – Tom11

+0

Scusa, non so cosa stavo pensando lì. – xdhmoore

0
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. 

rendere il vostro kernel simile a questa

2

anche di essere a conoscenza di: Se si scrivere i test e la visualizzazione ha $ errori variabili assicuratevi non utilizzare SenzaMiddleware tratto.

+1

Grazie mille per questo! Mi ha salvato una tonnellata di problemi – Kingsley