Avant-propos
Cet article vous présente principalement le contenu pertinent sur l'écriture de la validation de la demande dans Laravel Lors de l'écriture d'une API avec Laravel, la requête transmise depuis le front-end est. POST /PUT/PATH et d'autres méthodes nécessitent une validation de demande Bien que pour les programmes de séparation front-end et back-end, le programme front-end Angular/Vue ait déjà effectué la validation, mais l'entrée json transmise par ajax doit également être validée. à l'arrière.
Alors, comment rédiger une validation de demande avec élégance ? La documentation officielle de Laravel contient déjà cette fonctionnalité : Validation de demande de formulaire
La méthode d'implémentation est la suivante
Ici, vous pouvez écrire une JsonRequest :
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; } }
De cette façon, vous pouvez utiliser JsonRequest dans de nombreux contrôleurs de modèle, tels que :
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 => [ // ... ], '*' => [ // ... ], ]; }
De cette façon, vous pouvez vérifier si l'entrée json transmise par le front-end est légale.
(1) Si l'entrée json transmise depuis le front-end est :
{ "name": "lx1036", "type": "loan", "bank_account": { "source": "bank", } }
alors la validation échoue et est illégale.
(2) Si l'entrée json transmise depuis le front-end est :
{ "name": "lx1036", "type": "bank", "loan_account": { "source": "loan", } }
alors la validation échoue et est illégale.
De cette façon, l'entrée json peut être vérifiée si elle est illégale, elle lancera directement une HttpException, qui n'est plus utilisée pour entrer dans l'étape suivante de la logique. Pour une telle entrée json imbriquée, il est important d'utiliser la validation de demande pour vérifier la relation entre les objets. Elle peut être considérée comme une vérification préliminaire avant d'entrer dans la logique métier principale. . Bien sûr, il y a une validation du modèle lors de l'écriture du tableau à la fin pour empêcher de mauvaises données d'entrer dans la base de données.
Dernier point, la documentation de laravel ne parle que de l'utilisation, pas du principe. Le code est dans 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(); }); // ... }
, donc lorsque IlluminateFoundationHttpFormRequest est résolu à partir du conteneur, la méthode IlluminateFoundationHttpFormRequest::validate() sera exécutée immédiatement. Les détails ne sont pas détaillés, mais vous. peut voir le code source de Laravel.
OK, en bref, lors de l'écriture d'un programme, la validation est très importante et doit être écrite, y compris la validation des requêtes et la validation du modèle. . .
Résumé
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!