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!