Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erklärung zum Schreiben der Anforderungsvalidierung in Laravel

Ausführliche Erklärung zum Schreiben der Anforderungsvalidierung in Laravel

黄舟
黄舟Original
2017-10-26 10:32:411425Durchsuche

Vorwort

Dieser Artikel führt Sie hauptsächlich in den relevanten Inhalt zum Schreiben der Anforderungsvalidierung in Laravel ein. Beim Schreiben einer API mit Laravel wird die Anforderung vom Frontend übergeben POST /PUT/PATH und andere Methoden erfordern eine Anforderungsvalidierung. Für die Front-End- und Back-End-Trennprogramme hat das Front-End-Programm Angular/Vue zwar bereits eine Validierung durchgeführt, aber die von Ajax übergebene JSON-Eingabe muss ebenfalls validiert werden am hinteren Ende.

Wie schreibt man also die Anforderungsvalidierung elegant? Die offizielle Dokumentation von Laravel enthält diese Funktion bereits: Formularanforderungsvalidierung

Die Implementierungsmethode ist wie folgt

Hier können Sie eine JsonRequest schreiben:

class JsonRequest extends Illuminate\Foundation\Http\FormRequest
{
 public function rules()
 {
  $method = $this->method();
  
  assert(in_array($method, [static::METHOD_POST, static::METHOD_PUT, static::METHOD_PATCH], true));
  
  $controller = $this->route()->getController();
  $rules  = $controller::RULES;

  return ($rules[$this->method()] ?? []) + ($rules['*'] ?? []);
 }

 public function authorize()
 {
  return true;
 }
}

Auf diese Weise können Sie JsonRequest in vielen Model Controllern verwenden, wie zum Beispiel:

use Illuminate\Http\Request;

final class AccountController extends \App\Http\Controllers\Controller
{
 public const RULES = [
  Request::METHOD_POST => [
   'bank_account' => 'required_if:type,bank',
   'loan_account' => 'required_if:type,loan',
  ],
  Request::METHOD_PUT => [
   // ...
  ],
  '*' => [
   // ...
  ],
 ];
}

Auf diese Weise können Sie überprüfen, ob die vom Frontend übergebene JSON-Eingabe zulässig ist.

(1) Wenn die vom Frontend übergebene JSON-Eingabe lautet:

{
 "name": "lx1036",
 "type": "loan",
 "bank_account": {
  "source": "bank",
 }
}

dann schlägt die Validierung fehl und ist illegal.

(2) Wenn die vom Frontend übergebene JSON-Eingabe lautet:

{
 "name": "lx1036",
 "type": "bank",
 "loan_account": {
  "source": "loan",
 }
}

dann schlägt die Validierung fehl und ist illegal.

Auf diese Weise kann die JSON-Eingabe überprüft werden. Wenn sie illegal ist, wird direkt eine HttpException ausgelöst, die nicht mehr zum Aufrufen des nächsten Logikschritts verwendet wird. Für solche verschachtelten JSON-Eingaben ist es wichtig, die Anforderungsvalidierung zu verwenden, um die Beziehung zwischen Objekten zu überprüfen. Dies kann als vorläufige Überprüfung vor dem Eintritt in die Kerngeschäftslogik betrachtet werden. . Natürlich gibt es beim Schreiben der Tabelle auch eine Modellvalidierung, um zu verhindern, dass fehlerhafte Daten in die Datenbank gelangen.

Letzter Punkt: In der Laravel-Dokumentation geht es nur um die Verwendung, nicht um das Prinzip. Der Code befindet sich in IlluminateFoundationProvidersFormRequestServiceProvider::class:

 public function boot()
 {
  // \Illuminate\Foundation\Http\FormRequest use 了 ValidatesWhenResolvedTrait,extends 了 \Illuminate\Contracts\Validation\ValidatesWhenResolved
  $this->app->afterResolving(ValidatesWhenResolved::class, function ($resolved) {
   $resolved->validate();
  });

  // ...
 }

. Wenn also IlluminateFoundationHttpFormRequest aus dem Container aufgelöst wird, wird die IlluminateFoundationHttpFormRequest::validate()-Methode sofort ausgeführt kann den Laravel-Quellcode sehen.

OK, kurz gesagt, beim Schreiben eines Programms ist die Validierung sehr wichtig und muss geschrieben werden, einschließlich Anforderungsvalidierung und Modellvalidierung. . .

Zusammenfassung

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung zum Schreiben der Anforderungsvalidierung in Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn