2016-08-05 27 views
0

Ich habe schon eine Weile damit zu kämpfen. Hier ist der Code, den ich habe.Lumen FatalThrowableError bei Validierung

public function store(Request $request) 
{ 
    $validator = Validator::make($request->all(), [ 
     'name' => 'required|max:100' 
    ]); 
    if ($validator->fails()) { 
     //do something 
    } 
} 

Das Problem ist, dass ich ein FatalThrowableError direkt in mein Gesicht mit der folgenden Meldung erhalten:

Anruf an ein Mitglied Funktionsparameter() auf Array

Ich kann nicht finden, was ich falsch mache. Ich würde hier etwas Hilfe schätzen. Und auch, habe ich diese Validierung hatte vor, die gearbeitet:

$this->validate($request, [ 
     'name' => 'required|unique:developers|max:100' 
    ]); 

Aber die Sache mit diesem ist, dass ich keine Ahnung hatte, wie zu fangen, wenn die Überprüfung fehlschlägt. Ist es möglich, die Validierung fehlschlagen zu lassen, wenn Sie es auf diese Weise verwenden?

Mit Version: "Laravel/Lumen-Rahmen": "5.2. *"

+0

Welche Version von Lumen verwenden Sie? –

+0

"Laravel/Lumen-Framework": "5.2. *" – Serellyn

+0

Meine Antwort unten war für 5.2 –

Antwort

1

A FatalThrowableError Ausnahme ist niedriges Niveau Ausnahme, die typischerweise durch die symfony Debug ErrorHandler geworfen wird. In Lumen verwendet der Warteschlangen-Worker, die PhpEngine, der Konsolenkern und die Routing-Pipeline diese ebenfalls.

Stellen Sie sicher, der folgenden

  1. Dass Sie .env.example-.env
  2. Wenn Sie Fassaden verwenden kopiert haben, stellen Sie sicher, dass Sie es in bootstrap/app.php von uncommenting die Zeile aktiviert.

$app->withFacades();

Innen Lumen 5.2.8 eine der folgenden funktionieren würde.

Folgendes wird tatsächlich ein gültiges JSON-Objekt mit den Fehlern zurückgeben. Sie haben Ihren Anwendungsfall nicht näher erläutert, warum das nicht ausreicht. Was ist nett mit der Verwendung der validate Aufruf wie folgt ist, gibt es tatsächlich einen 422 http Statuscode, der eine unverarbeitete Entität impliziert.

$app->get('/', function (Request $request) { 
    $this->validate($request, [ 
     'name' => 'required' 
    ]); 
}); 

die Fassade Mit funktioniert auch, wenn auch liefert einen Code 200 Status ist.

$app->get('/', function (Request $request) {   
    $validator = Validator::make($request->only(['name']), [ 
     'name' => 'required' 
    ]); 

    if ($validator->fails()) { 
     return ['error' => 'Something went wrong']; 
    } 
}); 

Wenn Sie noch kommen nicht direkt mit der Validator::make Sie die Standard-Validation Ausnahme mit fangen. Es fühlt sich ein wenig hacky an.

$app->get('/', function (Request $request) { 
    try { 
     $this->validate($request, [ 
      'name' => 'required' 
     ]); 
    } catch (\Illuminate\Validation\ValidationException $e) { 
     // do whatever else you need todo for your use case 
     return ['error' => 'We caught the exception']; 
    } 
}); 
+0

Die .env-Datei und Fassaden waren vorhanden, kein Problem dort. Dann habe ich Ihr zweites Beispiel mit dem $ validator-> fails() versucht, das funktioniert hat. Eine Sache, die mir aufgefallen ist, war genau die gleiche wie meine, aber mit einem Unterschied und das war, dass Sie nur eine Anfragevariable nehmen. Also bekomme ich den Fehler auf $ request-> all(). Ich frage mich wirklich, warum das nicht gemacht werden kann?Und noch eine Frage, in Ihrem Beispiel ist die Validierung im Routing, ich habe meine in meinem Controller, ist das ein Problem? – Serellyn

+0

Das ist seltsam, $ request-> all() und $ request-> nur (['name', 'Nachname']) werden beide Arrays zurückgeben. $ Request-> all() verwendet jedoch array_replace_recursive und kombiniert Eingaben mit hochgeladenen Dateien. Dann gibt es keinen Unterschied beim Verschieben der Validierung zum Controller, es wird das gleiche Request-Objekt verwenden. –

+0

Nun Leon, danke für deine Hilfe :) – Serellyn