【问题标题】:how to implement EnumClass::$userInput on php 8.1 Enums?如何在 php 8.1 枚举上实现 EnumClass::$userInput?
【发布时间】:2023-02-24 18:21:45
【问题描述】:

我一直在使用 laravel 学习 php 8.1 上的新枚举介绍,用于 eccomerce cms。我对SOLID 原则是全新的。

这是我的枚举类:

enum PaymentMethods : string
{
    case PAYPAL  = 'pay with paypal';
    case STRIPE  = 'pay with stripe';
}

在结帐页面上,用户可以选择一种付款方式,如下所示:

<select name="delivery_method">
    @foreach(DeliveryMethods::cases() as $case)
        <option value="{{ $case->name }}">{{ $case->value }}</option>
    @endforeach
</select>

假设我们在视图中有 PAYPAL 值(取自用户输入),我们想从 PaymentMethods 枚举类访问 PAYPAL 的值,

一种方法是我使用这样的 foreach 循环:

<p>
    @foreach(DeliveryMethods::cases() as $case)
        @if(request()->get('payment_method') == $case->name)
            {{ $case->value }}
        @endif
    @endforeach
</p>

但我想在不同的地方多次使用这个逻辑, 基于可靠的原则,有没有更好的方法来代替这样做?

【问题讨论】:

    标签: php laravel enums solid-principles php-8.1


    【解决方案1】:

    您可以使用为 backed enums 以及 nullsafe 和 null 合并运算符提供的方法之一来缩短代码。

    {{ DeliveryMethods::tryFrom(request()->get('payment_method'))?->value ?? 'some default value' }}
    

    如果您希望代码在传递无效枚举值而不是处理空值时失败,则可以使用 from(...) 而不是 tryFrom(...)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 2010-09-09
      • 2015-05-30
      • 2022-09-23
      • 1970-01-01
      相关资源
      最近更新 更多