首頁 > 後端開發 > php教程 > 使用「when()」和「unless()」方法掌握 Laravel 中的條件邏輯:現實生活中的範例

使用「when()」和「unless()」方法掌握 Laravel 中的條件邏輯:現實生活中的範例

Mary-Kate Olsen
發布: 2025-01-16 16:06:10
原創
737 人瀏覽過

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

Laravel,著名的 PHP 框架,擁有優雅的語法和強大的功能。 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() 在以下位置的使用:

  • 支付網關整合:依照使用者選擇的方式選擇支付邏輯。
  • 房地產價格計算:根據首次購買者狀態或促銷代碼套用折扣。
  • 醫療預約:依保險範圍調整付款。
  • 比特幣價格調整:根據市場波動添加費用。
  • 電子商務產品可用性:根據地點決定運費。
  • 醫療計畫:依照病患狀況分配治療計畫。

這些範例突顯了 Laravel 的 when()unless() 方法在不同應用程式中的多功能性和優雅性。 透過利用這些方法,開發人員可以編寫更乾淨、更易於維護、更易讀的 Laravel 程式碼。

以上是使用「when()」和「unless()」方法掌握 Laravel 中的條件邏輯:現實生活中的範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板