Explication détaillée de la validation de la demande d'écriture dans Laravel

黄舟
Libérer: 2023-03-16 19:18:01
original
1424 Les gens l'ont consulté

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;
 }
}
Copier après la connexion

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 => [
   // ...
  ],
  '*' => [
   // ...
  ],
 ];
}
Copier après la connexion

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",
 }
}
Copier après la connexion

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",
 }
}
Copier après la connexion

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();
  });

  // ...
 }
Copier après la connexion

, 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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!