Maison > développement back-end > tutoriel php > Maîtriser la logique conditionnelle dans Laravel avec les méthodes `when()` et `unless()` : exemples concrets

Maîtriser la logique conditionnelle dans Laravel avec les méthodes `when()` et `unless()` : exemples concrets

Mary-Kate Olsen
Libérer: 2025-01-16 16:06:10
original
737 Les gens l'ont consulté

Mastering Conditional Logic in Laravel with `when()` and `unless()` Methods: Real-Life Examples

Laravel, un framework PHP renommé, possède une syntaxe élégante et des fonctionnalités puissantes. Introduites dans Laravel 11.35.0, les méthodes when() et unless() (qui font partie du trait Conditionable) offrent une approche plus concise et efficace de la logique conditionnelle, améliorant considérablement la lisibilité et la maintenabilité du code. Cet article explore les applications pratiques de ces méthodes dans des scénarios Laravel réels.

1. Attribution de rôle dynamique basée sur la saisie de l'utilisateur

Envisagez un formulaire d'inscription d'utilisateur dans lequel les utilisateurs sélectionnent un rôle. Après l'inscription, différentes autorisations sont attribuées en fonction du rôle choisi.

Sans when() :

<code class="language-php">if ($request->has('role')) {
    $user->assignRole($request->input('role'));
}</code>
Copier après la connexion

Avec when() :

<code class="language-php">$user->when($request->has('role'), function ($user) use ($request) {
    $user->assignRole($request->input('role'));
});</code>
Copier après la connexion

La méthode when() encapsule parfaitement l'attribution des rôles, s'exécutant uniquement lorsqu'un rôle est fourni.

2. Règles de validation dynamique

Dans un formulaire, certains champs peuvent nécessiter une validation uniquement sous certaines conditions. Par exemple, le champ email n'est obligatoire que si l'utilisateur s'inscrit à une newsletter.

Sans when() :

<code class="language-php">$rules = [
    'email' => 'nullable',
];

if ($request->has('newsletter')) {
    $rules['email'] = 'required|email';
}

$request->validate($rules);</code>
Copier après la connexion

Avec when() :

<code class="language-php">$request->when($request->has('newsletter'), function () use ($request) {
    $request->validate([
        'email' => 'required|email',
    ]);
});</code>
Copier après la connexion

Cette approche plus propre exploite when() pour la validation conditionnelle.

3. Fusion de données conditionnelle

Dans le commerce électronique, les réductions peuvent s'appliquer uniquement avec un code promo valide. Fusionnons dynamiquement les données de remise.

Sans when() :

<code class="language-php">$data = [
    'total_price' => $cart->totalPrice(),
];

if ($request->has('coupon_code')) {
    $coupon = Coupon::where('code', $request->input('coupon_code'))->first();
    if ($coupon) {
        $data['discount'] = $coupon->discount_amount;
    }
}

return response()->json($data);</code>
Copier après la connexion

Avec when() :

<code class="language-php">$data = [
    'total_price' => $cart->totalPrice(),
];

$data = $data->when($request->has('coupon_code'), function ($data) use ($request) {
    $coupon = Coupon::where('code', $request->input('coupon_code'))->first();
    if ($coupon) {
        $data['discount'] = $coupon->discount_amount;
    }
    return $data;
});

return response()->json($data);</code>
Copier après la connexion

Cela démontre une approche plus rationalisée et chaînable de l'application de remises conditionnelles.

4. Simplifier la logique du statut de l'utilisateur

L'envoi de différents messages en fonction du statut d'activation de l'utilisateur peut être simplifié à l'aide de unless().

Sans unless() :

<code class="language-php">if (!$user->isActive()) {
    return "Your account is inactive. Please contact support.";
} else {
    return "Welcome back!";
}</code>
Copier après la connexion

Avec unless() :

<code class="language-php">return $user->unless($user->isActive(), function () {
    return "Your account is inactive. Please contact support.";
})->otherwise(function () {
    return "Welcome back!";
});</code>
Copier après la connexion

unless() condense la logique conditionnelle en une seule instruction return lisible.

5. Combiner when() et unless()

Pour les scénarios complexes, combinez when() et unless() pour gérer différents types d'utilisateurs (administrateur, invité, etc.) et afficher le contenu approprié.

<code class="language-php">$variable->when($user->isAdmin(), function ($variable) {
    return $variable->adminDashboard();
})->unless($user->isAdmin(), function ($variable) {
    return $variable->guestDashboard();
});</code>
Copier après la connexion

Autres exemples (brièvement résumés) :

L'article continue avec des exemples concis similaires démontrant l'utilisation de when() et unless() dans :

  • Intégration de la passerelle de paiement : Sélection de la logique de paiement en fonction de la méthode choisie par l'utilisateur.
  • Calcul du prix de l'immobilier : Application de remises en fonction du statut de premier acheteur ou de codes promotionnels.
  • Rendez-vous médicaux : Ajustement du paiement en fonction de la couverture d'assurance.
  • Ajustement du prix du Bitcoin : Ajout de frais en fonction de la volatilité du marché.
  • Disponibilité des produits de commerce électronique : Détermination des frais d'expédition en fonction de l'emplacement.
  • Plans de traitement médical : Attribution de plans de traitement en fonction de l'état du patient.

Ces exemples mettent en évidence la polyvalence et l'élégance des méthodes when() et unless() de Laravel dans diverses applications. En utilisant ces méthodes, les développeurs peuvent écrire du code Laravel plus propre, plus maintenable et plus lisible.

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal