ホームページ >バックエンド開発 >PHPチュートリアル >`when()` メソッドと `unless()` メソッドを使用して Laravel の条件付きロジックをマスターする: 実際の例

`when()` メソッドと `unless()` メソッドを使用して Laravel の条件付きロジックをマスターする: 実際の例

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-16 16:06:10737ブラウズ

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

有名な PHP フレームワークである Laravel は、エレガントな構文と強力な機能を誇ります。 Laravel 11.35.0 で導入された when() メソッドと unless() メソッド (Conditionable トレイトの一部) は、条件付きロジックに対するより簡潔で効率的なアプローチを提供し、コードの可読性と保守性を大幅に向上させます。この記事では、これらのメソッドを実際の Laravel シナリオで実際に応用する方法について説明します。

1.ユーザー入力に基づく動的な役割の割り当て

ユーザーが役割を選択するユーザー登録フォームを考えてみましょう。 登録後、選択したロールに基づいてさまざまな権限が割り当てられます。

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>

when() メソッドは、ロールの割り当てを適切にカプセル化し、ロールが提供された場合にのみ実行します。

2.動的検証ルール

フォームでは、特定のフィールドは特定の条件下でのみ検証を必要とする場合があります。たとえば、電子メール フィールドは、ユーザーがニュースレターにオプトインする場合にのみ必須です。

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>

このよりクリーンなアプローチでは、条件付き検証に when() を利用します。

3.条件付きデータの結合

電子商取引では、有効なクーポン コードがある場合にのみ割引が適用される場合があります。 割引データを動的にマージしましょう。

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>

これは、条件付き割引適用に対するより合理化された連鎖可能なアプローチを示しています。

4.ユーザーステータスロジックの簡素化

ユーザーのアクティベーションステータスに基づいて異なるメッセージを送信することは、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() は、条件ロジックを単一の読みやすい return ステートメントに凝縮します。

5. when()unless()

の組み合わせ

複雑なシナリオの場合は、when()unless() を組み合わせて、さまざまなユーザー タイプ (管理者、ゲストなど) を管理し、適切なコンテンツを表示します。

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

さらなる例 (簡単に要約):

この記事では、when() での unless()

の使用を示す同様の簡潔な例が続きます。
  • 支払いゲートウェイの統合: ユーザーが選択した方法に基づいて支払いロジックを選択します。
  • 不動産価格の計算: 初回購入者のステータスまたはプロモーション コードに基づいて割引を適用します。
  • 医療予約: 保険適用範囲に基づいて支払いを調整します。
  • ビットコイン価格調整: 市場のボラティリティに基づいて手数料を追加します。
  • E コマース製品の在庫状況: 配送料は地域に基づいて決定されます。
  • 治療計画: 患者の状態に基づいて治療計画を割り当てます。

これらの例は、さまざまなアプリケーションにわたる Laravel の when() メソッドと unless() メソッドの多用途性と優雅さを強調しています。 これらのメソッドを利用することで、開発者はよりクリーンで保守性が高く、読みやすい Laravel コードを作成できます。

以上が`when()` メソッドと `unless()` メソッドを使用して Laravel の条件付きロジックをマスターする: 実際の例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。