2015-12-26 14 views
11

Ich bin neu in Laravel und Laravel Version 5.2 verwenden.Nicht definierte Variable: Fehler - Laravel 5.2

habe ich einen Controller und Anforderung als ArticlesController genannt und CreateArticleRequest jeweils und i definierten Regeln einige Validierung.

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

Wenn ich in meiner Vorlage $ errors als add.blade.php benannte Variable verwenden es Fehler undefinierte Variable zeigen: $ Fehler Ich habe versucht, das Problem zu lösen lem aber ich tat es nicht. Bitte sag mir, wo ich falsch liege. sie add.blad.php

{{ var_dump($errors) }} 

Click here to see Error Image

+0

Führen Sie eine grundlegende Überprüfung mit 'isset' durch, so dass die Variable nicht zurückgegeben wird, wenn sie nicht gesetzt ist. –

+1

@ MichaelSørensen Es ist Laravel, die Variable soll immer in allen Ansichten verfügbar sein. Wenn es also nicht in einer Ansicht festgelegt ist, ist es wahrscheinlich ein Problem, das global angegangen werden muss. –

+0

@ MichaelSørensen Ich befolge die Laravel-Tutorials und dort habe ich die gleiche Arbeit gemacht, aber ich habe es undefiniert Variable $ errors und ich habe es auch mit isetet ($ error) check versucht, aber bei der Validierung zeigt es keinen Fehler. –

Antwort

28

Dies ist ein Bruch Problem mit dem 5.2-Upgrade. Was passiert, ist die Middleware, die dafür verantwortlich ist, dass die errors Variable, die für alle Ihre Ansichten verfügbar ist, nicht verwendet wird, weil sie von der globalen Middleware in die Middlewaregruppe web verschoben wurde.

Es gibt zwei Möglichkeiten, dieses Problem zu beheben:

  1. In Ihrer kernel.php Datei (app/Http/Kernel.php), können Sie die middleware \Illuminate\View\Middleware\ShareErrorsFromSession::class zurück zum protected $middleware Eigenschaft bewegen.

  2. Wrap alle Ihre web Strecken mit einer Streckengruppe und wenden Sie die Web-Middleware zu ihnen:

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

von diesem Posten Kopierte Laravel 5.2 $errors not appearing in Blade

+0

Die gleiche Lösung mit Screenshots finden Sie in diesem Link: http://preprogrammer.com/undefined-variable-errors-in-laravel-5-2-solved/ –

-2

Mit diesem Code können Sie Fehler abfangen und anzeigen:

@if ($errors->any()) 
<div class='alert alert-danger'> 
    @foreach ($errors->all() as $error) 
    <p>{{ $error }}</p> 
    @endforeach 
</div> 
@endif 
+0

ja können wir Fehlermeldung von diesem Weg fangen, aber das ist nicht mein Problem. Mein Problem ist, dass ich solche Art von Fehler konfrontiert: undefinierte Variable $ Fehler. Lesen Sie die Frage sorgfältig. –

+1

Vielleicht kann Ihnen das helfen: http://stackoverflow.com/questions/34420590/laravel-5-2-validation-errors – Kokno

+0

der Kommentar von @Kokno sollte wahrscheinlich eine Antwort sein .. die Antwort auf den Link erklärt sehr gut, was hat sich von 5.1 zu 5.2 geändert – mikey

1

Schneiden Sie einfach alle Ihre Routen von Routen.PHP-Datei und fügen Sie zwischen der Middleware-Gruppe ‚web‘, wie folgt aus:

Routes file

+0

tun dies gab mir eine 'FatalErrorException' -' Aufruf an eine Memberfunktion parameter() on null'. –

4

dieses Posting als es für andere nützlich sein könnten,

Wie Praveen in erster Lösung erwähnt, in Ihrem Kernel.php Datei (app/Http/Kernel.php) bewegen \Illuminate\View\Middleware\ShareErrorsFromSession::class $middlewareGroups-protected $middleware Eigenschaft, aber das gleiche startet den Fehler „Session speichern nicht festgelegt auf Anfrage“ zu werfen,

diesen Schritt zu lösen \Illuminate\Session\Middleware\StartSession::class, bis $middleware property auch.

+0

wo ist 'Middleware-Eigenschaft'? –

0

Für 5.2, einfach die die Routen bewegen, die die Fehler Variable Gruppe Middleware

2

Dies geschieht, weil die Datei unten nicht im Composer-Aktualisierungsprozess aktualisiert wird, muss so nicht die mapWebRoutes Methode implementiert.

app/Providers/RouteServiceProvider.php 

Kopieren Sie diese Datei von einer neuen Installation und es wird funktionieren. Besser, folgen Sie dem Upgrade-Pfad für die Dokumente.