Maison cadre php Laravel Une façon intelligente de gérer la validation des demandes dans Laravel

Une façon intelligente de gérer la validation des demandes dans Laravel

Sep 20, 2019 am 09:41 AM
laravel

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(), [
           &#39;email&#39; => &#39;required|email|unique:users&#39;,
           &#39;name&#39; => &#39;required|string|max:50&#39;,
           &#39;password&#39; => &#39;required&#39;
       ]);
       if ($validator->fails()) {
            Session::flash(&#39;error&#39;, $validator->messages()->first());
            return redirect()->back()->withInput();
       }
       // finally store our user
    }
}
Copier après la connexion

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 [
            &#39;email&#39; => &#39;required|email|unique:users&#39;,
            &#39;name&#39; => &#39;required|string|max:50&#39;,
            &#39;password&#39; => &#39;required&#39;
        ];
    }
     /**
     * Custom message for validation
     *
     * @return array
     */
    public function messages()
    {
        return [
            &#39;email.required&#39; => &#39;Email is required!&#39;,
            &#39;name.required&#39; => &#39;Name is required!&#39;,
            &#39;password.required&#39; => &#39;Password is required!&#39;
        ];
    }
}
Copier après la connexion

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

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

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 [
            &#39;email&#39; => &#39;required|email|unique:users&#39;,
            &#39;name&#39; => &#39;required|string|max:50&#39;,
            &#39;password&#39; => &#39;required&#39;
        ];
    }
    public function messages()
    {
        return [
            &#39;email.required&#39; => &#39;Email is required!&#39;,
            &#39;name.required&#39; => &#39;Name is required!&#39;,
            &#39;password.required&#39; => &#39;Password is required!&#39;
        ];
    }
    /**
     *  Filters to be applied to the input.
     *
     * @return array
     */
    public function filters()
    {
        return [
            &#39;email&#39; => &#39;trim|lowercase&#39;,
            &#39;name&#39; => &#39;trim|capitalize|escape&#39;
        ];
    }
}
Copier après la connexion

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Comment utiliser le mappage objet-relationnel (ORM) en PHP pour simplifier les opérations de base de données ? Comment utiliser le mappage objet-relationnel (ORM) en PHP pour simplifier les opérations de base de données ? May 07, 2024 am 08:39 AM

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 des avantages et inconvénients des outils de tests unitaires PHP Analyse des avantages et inconvénients des outils de tests unitaires PHP May 06, 2024 pm 10:51 PM

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é.

Comparaison des dernières versions de Laravel et CodeIgniter Comparaison des dernières versions de Laravel et CodeIgniter Jun 05, 2024 pm 05:29 PM

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 - Commandes artisanales Laravel - Commandes artisanales Aug 27, 2024 am 10:51 AM

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 ?

Comment les capacités de traitement des données de Laravel et de CodeIgniter se comparent-elles ? Comment les capacités de traitement des données de Laravel et de CodeIgniter se comparent-elles ? Jun 01, 2024 pm 01:34 PM

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

Laravel vs CodeIgniter : quel framework est le meilleur pour les grands projets ? Laravel vs CodeIgniter : quel framework est le meilleur pour les grands projets ? Jun 04, 2024 am 09:09 AM

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.

Lequel est le plus adapté aux débutants, Laravel ou CodeIgniter ? Lequel est le plus adapté aux débutants, Laravel ou CodeIgniter ? Jun 05, 2024 pm 07:50 PM

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.

Tests unitaires de code PHP et tests d'intégration Tests unitaires de code PHP et tests d'intégration May 07, 2024 am 08:00 AM

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.

See all articles