Une façon intelligente de gérer la validation des demandes dans Laravel
Laravel est le framework PHP pour Web Craftsman. Cela nous aide à créer des applications et des API puissantes. Comme beaucoup d'entre vous le savent, il existe de nombreuses façons de valider les requêtes dans Laravel. La gestion de la validation des demandes est une partie très importante de toute application. Laravel possède des fonctionnalités intéressantes qui gèrent très bien ce problème.
Démarrage
La plupart d'entre nous sont habitués à utiliser des validateurs dans les contrôleurs. Il s'agit de la manière la plus courante de gérer la validation des demandes entrantes.
Voici à quoi ressemble notre validateur UserController
<?php namespace App\Http\Controllers\API\v1\Users; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\Validator; use App\Entities\Models\User; class UserController extends Controller { public function store(Request $request) { // validate incoming request $validator = Validator::make($request->all(), [ 'email' => 'required|email|unique:users', 'name' => 'required|string|max:50', 'password' => 'required' ]); if ($validator->fails()) { Session::flash('error', $validator->messages()->first()); return redirect()->back()->withInput(); } // finally store our user } }
Validation dans le contrôleur
Validation des requêtes entrantes dans le contrôleur sans aucun problème, mais ce n'est pas le meilleure approche et votre contrôleur aura l’air en désordre. À mon avis, c'est une mauvaise pratique. Le contrôleur ne doit traiter qu’une seule demande de gestionnaire de la route et renvoyer une réponse appropriée.
L'écriture d'une logique de validation dans le contrôleur brisera le principe de responsabilité unique. Nous savons tous que les exigences changent avec le temps, et chaque fois que les exigences changent, vos responsabilités de classe changeront également. Par conséquent, avoir beaucoup de responsabilités dans une seule classe rend la gestion très difficile.
Laravel a des requêtes de formulaire, une classe de requêtes distincte qui contient une logique de validation. Pour en créer un, vous pouvez utiliser la commande Artisan.
php artisan make : request UserStoreRequest
Cela créera une nouvelle classe Request appHttpRequestUserRequest
<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class UserStoreRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'email' => 'required|email|unique:users', 'name' => 'required|string|max:50', 'password' => 'required' ]; } /** * Custom message for validation * * @return array */ public function messages() { return [ 'email.required' => 'Email is required!', 'name.required' => 'Name is required!', 'password.required' => 'Password is required!' ]; } }
La classe Laravel Form Request a deux méthodes par défaut auth() et Rules(). Vous pouvez exécuter n'importe quelle logique d'autorisation dans la méthode auth(), que l'utilisateur actuel soit ou non autorisé à demander. Dans la méthode Rules(), vous pouvez écrire toutes les règles de validation. Il existe également une méthode messages() pour transmettre votre propre tableau de messages de validation.
Modifiez maintenant notre UserController pour utiliser notre UserStoreRequest. Vous pouvez saisir l'invite de notre classe de requête et elle analysera et validera automatiquement avant d'appeler notre fonction de contrôleur.
<?php namespace App\Http\Controllers\API\v1\Users; use App\Http\Controllers\Controller; use App\Http\Requests\UserStoreRequest; class UserController extends Controller { public function store(UserStoreRequest $request) { // Will return only validated data $validated = $request->validated(); } }
Notre contrôleur est donc désormais mince et facile à entretenir. Désormais, notre contrôleur n'a plus à se soucier d'aucune logique de validation. Nous avons notre propre classe de validation avec une seule responsabilité : gérer la validation et laisser le contrôleur y travailler.
Si la vérification échoue, elle redirigera l'utilisateur vers l'emplacement précédent et affichera une erreur. En fonction de votre type de demande, un message d'erreur clignotera dans la session. Si la requête est AJAX, une réponse sera renvoyée avec un code d'état 422 et une erreur au format JSON.
Retour
Protégez votre application et vos utilisateurs en nettoyant les entrées. Utilisez un nettoyeur dans votre application et cela garantira que les données sont toujours bien formatées et cohérentes. Dans de nombreux cas, la validation échoue en raison d’erreurs de formatage stupides.
Le numéro de téléphone mobile saisi par l'utilisateur est le +99-9999-999999 ou le +99-(9999)-(999999). Il s'agit d'une erreur très courante et nous ne pouvons pas forcer nos utilisateurs à saisir à nouveau les mêmes informations.
Quelques autres exemples seraient si l'utilisateur saisit un e-mail sous la forme Foo@Bar.COM ou FOO@Bar.com. Ou entrez le prénom et le nom comme FOO **bAR ou foo bar**
Sanitizer contient des méthodes pour transformer et filtrer les données dans un format commun avant de les transmettre au validateur.
J'utilise le package Waavi/Sanitizer qui contient de nombreux filtres.
Waavi / Nettoyage des données
Créons la classe abstraite BaseFormRequest pour la demande de formulaire et utilisons le trait SanitizesInput ici.
<?php namespace App\Http\Requests; use Illuminate\Contracts\Validation\Validator; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Http\Exceptions\HttpResponseException; use Illuminate\Http\JsonResponse; use Waavi\Sanitizer\Laravel\SanitizesInput; abstract class BaseFormRequest extends FormRequest { use ApiResponse, SanitizesInput; /** * For more sanitizer rule check https://github.com/Waavi/Sanitizer */ public function validateResolved() { { $this->sanitize(); parent::validateResolved(); } } /** * Get the validation rules that apply to the request. * * @return array */ abstract public function rules(); /** * Determine if the user is authorized to make this request. * * @return bool */ abstract public function authorize(); }
Nous pouvons donc maintenant écrire le contenu sous UserStoreRequest. Étendez vos requêtes de formulaire à partir de notre classe de base afin que nous n'ayons pas à inclure de traits dans toutes les classes de requêtes.
<?php namespace App\Http\Requests; class UserStoreRequest extends BaseFormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'email' => 'required|email|unique:users', 'name' => 'required|string|max:50', 'password' => 'required' ]; } public function messages() { return [ 'email.required' => 'Email is required!', 'name.required' => 'Name is required!', 'password.required' => 'Password is required!' ]; } /** * Filters to be applied to the input. * * @return array */ public function filters() { return [ 'email' => 'trim|lowercase', 'name' => 'trim|capitalize|escape' ]; } }
SanitizesInputtrait fournit une méthode filters() pour formater les données de notre requête avant de les fournir au validateur. La méthode filters() renvoie un tableau de filtres valides. Ici, nous convertissons l'e-mail de l'utilisateur en minuscules et coupons de la même manière que nous avons converti le nom en majuscules et échappons à toutes les balises HTML.
Vous pouvez en savoir plus sur les filtres disponibles ici.
Conclusion
Tout d'abord, il semble qu'il ne soit pas nécessaire de faire des classes de requêtes séparées pour tout le monde. Mais imaginez mettre toute la logique de validation dans le même contrôleur. C'est comme un mauvais cauchemar : lorsqu'il s'agit de gérer votre code, à quel point est-ce pire si quelqu'un d'autre doit le gérer ? .
Merci d'avoir lu.
J’aimerais connaître votre avis à ce sujet. Si vous avez des questions ou des suggestions, veuillez laisser un commentaire ci-dessous.
Bonne journée.
Pour plus d'articles techniques liés à Laravel, veuillez visiter la colonne Tutoriel d'introduction au framework Laravel pour apprendre !
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Les opérations de base de données en PHP sont simplifiées à l'aide d'ORM, qui mappe les objets dans des bases de données relationnelles. EloquentORM dans Laravel vous permet d'interagir avec la base de données en utilisant une syntaxe orientée objet. Vous pouvez utiliser ORM en définissant des classes de modèle, en utilisant des méthodes Eloquent ou en créant un système de blog dans la pratique.

Analyse de l'outil de test unitaire PHP : PHPUnit : convient aux grands projets, fournit des fonctionnalités complètes et est facile à installer, mais peut être verbeux et lent. PHPUnitWrapper : adapté aux petits projets, facile à utiliser, optimisé pour Lumen/Laravel, mais a des fonctionnalités limitées, ne fournit pas d'analyse de couverture de code et dispose d'un support communautaire limité.

Les dernières versions de Laravel 9 et CodeIgniter 4 fournissent des fonctionnalités et des améliorations mises à jour. Laravel9 adopte l'architecture MVC et fournit des fonctions telles que la migration de bases de données, l'authentification et le moteur de modèles. CodeIgniter4 utilise l'architecture HMVC pour fournir le routage, l'ORM et la mise en cache. En termes de performances, le modèle de conception basé sur le fournisseur de services de Laravel9 et le framework léger de CodeIgniter4 lui confèrent d'excellentes performances. Dans les applications pratiques, Laravel9 convient aux projets complexes qui nécessitent de la flexibilité et des fonctions puissantes, tandis que CodeIgniter4 convient au développement rapide et aux petites applications.

Laravel - Artisan Commands - Laravel 5.7 est livré avec une nouvelle façon de traiter et de tester de nouvelles commandes. Il inclut une nouvelle fonctionnalité de test des commandes artisanales et la démonstration est mentionnée ci-dessous ?

Comparez les capacités de traitement des données de Laravel et CodeIgniter : ORM : Laravel utilise EloquentORM, qui fournit un mappage relationnel classe-objet, tandis que CodeIgniter utilise ActiveRecord pour représenter le modèle de base de données en tant que sous-classe de classes PHP. Générateur de requêtes : Laravel dispose d'une API de requêtes chaînées flexible, tandis que le générateur de requêtes de CodeIgniter est plus simple et basé sur des tableaux. Validation des données : Laravel fournit une classe Validator qui prend en charge les règles de validation personnalisées, tandis que CodeIgniter a moins de fonctions de validation intégrées et nécessite un codage manuel des règles personnalisées. Cas pratique : l'exemple d'enregistrement d'utilisateur montre Lar

Lors du choix d'un framework pour de grands projets, Laravel et CodeIgniter ont chacun leurs propres avantages. Laravel est conçu pour les applications d'entreprise, offrant une conception modulaire, une injection de dépendances et un ensemble de fonctionnalités puissantes. CodeIgniter est un framework léger plus adapté aux projets de petite et moyenne taille, mettant l'accent sur la rapidité et la facilité d'utilisation. Pour les grands projets avec des exigences complexes et un grand nombre d'utilisateurs, la puissance et l'évolutivité de Laravel sont plus adaptées. Pour les projets simples ou les situations avec des ressources limitées, les capacités de développement légères et rapides de CodeIgniter sont plus idéales.

Pour les débutants, CodeIgniter a une courbe d'apprentissage plus douce et moins de fonctionnalités, mais couvre les besoins de base. Laravel offre un ensemble de fonctionnalités plus large mais a une courbe d'apprentissage légèrement plus raide. En termes de performances, Laravel et CodeIgniter fonctionnent bien. Laravel dispose d'une documentation plus complète et d'un support communautaire actif, tandis que CodeIgniter est plus simple, léger et possède de solides fonctionnalités de sécurité. Dans le cas pratique de la création d'une application de blog, EloquentORM de Laravel simplifie la manipulation des données, tandis que CodeIgniter nécessite une configuration plus manuelle.

Guide des tests unitaires et d'intégration PHP Tests unitaires : concentrez-vous sur une seule unité de code ou de fonction et utilisez PHPUnit pour créer des classes de cas de test à des fins de vérification. Tests d'intégration : faites attention à la façon dont plusieurs unités de code fonctionnent ensemble et utilisez les méthodes setUp() et TearDown() de PHPUnit pour configurer et nettoyer l'environnement de test. Cas pratique : utilisez PHPUnit pour effectuer des tests unitaires et d'intégration dans les applications Laravel, notamment la création de bases de données, le démarrage de serveurs et l'écriture de code de test.
