Maison >développement back-end >tutoriel php >Maîtriser la logique conditionnelle dans Laravel avec les méthodes `when()` et `unless()` : exemples concrets
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.
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.
when()
:<code class="language-php">if ($request->has('role')) { $user->assignRole($request->input('role')); }</code>
when()
:<code class="language-php">$user->when($request->has('role'), function ($user) use ($request) { $user->assignRole($request->input('role')); });</code>
La méthode when()
encapsule parfaitement l'attribution des rôles, s'exécutant uniquement lorsqu'un rôle est fourni.
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.
when()
:<code class="language-php">$rules = [ 'email' => 'nullable', ]; if ($request->has('newsletter')) { $rules['email'] = 'required|email'; } $request->validate($rules);</code>
when()
:<code class="language-php">$request->when($request->has('newsletter'), function () use ($request) { $request->validate([ 'email' => 'required|email', ]); });</code>
Cette approche plus propre exploite when()
pour la validation conditionnelle.
Dans le commerce électronique, les réductions peuvent s'appliquer uniquement avec un code promo valide. Fusionnons dynamiquement les données de remise.
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>
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>
Cela démontre une approche plus rationalisée et chaînable de l'application de remises conditionnelles.
L'envoi de différents messages en fonction du statut d'activation de l'utilisateur peut être simplifié à l'aide de unless()
.
unless()
:<code class="language-php">if (!$user->isActive()) { return "Your account is inactive. Please contact support."; } else { return "Welcome back!"; }</code>
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>
unless()
condense la logique conditionnelle en une seule instruction return
lisible.
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>
L'article continue avec des exemples concis similaires démontrant l'utilisation de when()
et unless()
dans :
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!