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中文网其他相关文章!