Laravel,著名的 PHP 框架,擁有優雅的語法和強大的功能。 Laravel 11.35.0 中引入的 when()
和 unless()
方法(Conditionable
特徵的一部分)為條件邏輯提供了更簡潔、更有效率的方法,顯著提高了程式碼的可讀性和可維護性。本文探討了這些方法在真實 Laravel 場景中的實際應用。
考慮一個使用者註冊表單,使用者可以在其中選擇角色。 註冊後,根據選擇的角色分配不同的權限。
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()
方法巧妙地封裝了角色分配,僅在提供角色時執行。
在表單中,某些欄位可能僅在特定條件下才需要驗證。例如,只有當使用者選擇接收時事通訊時,電子郵件欄位才是必填欄位。
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()
來進行條件驗證。
在電子商務中,折扣可能僅適用於有效的優惠券代碼。 讓我們動態合併折扣資料。
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>
這展示了一種更精簡、可連結的有條件折扣申請方法。
可以使用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
語句。
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中文網其他相關文章!