首页 > 解决方案 > 如何使用简化的选择框 IF 语句 PHP

问题描述

我有一个行程状态页面,我想输出行程的状态。

我在创建行程时将数值存储在数据库中。

状态值:

这是我目前工作的 IF 声明: 只是想简化它

<select name="status">
    <option value="{{ $destination->status }}" selected>
        @if($destination->status == 0)
            On Time
        @elseif($destination->status == 1)
            On Hold
        @elseif($destination->status == 2)
             Delayed
        @elseif($destination->status == 3)
            Completed
        @elseif($destination->status == 4)
            Canceled
        @endif
     </option>
@foreach ($status as $key => $value)
<option value="{{ $key }}">{{ $value }}
</option>
@endforeach
</select>

对于简单的 YES 或 NO IF 语句,我可以这样做:

$destination->private= 0 表示否,1 表示是

<option value="{{ $destination->private }}" selected>{{ $destination->private ? 'Yes' : 'No' }}</option>

如何采用简单的是或否逻辑并将其应用于较大的选择框 If Statement?

标签: phplaravelif-statement

解决方案


您无法将具有 5 个单独的 if/else 的条件简化为远程清晰的三元组。

首先,我不会将您的观点与代表您的状态的数字联系起来。$destination在你的课堂上考虑一些方法。例如:

protected const ON_TIME = 1;

public function isOnTime(): bool
{
    return $this->status === self::ON_TIME;
}

在您的视图中使用这些

@if ($destination->isOnTime())
  On Time
@else ...

虽然这不会简化您的条件,但它比需要跟踪哪个整数值对应于哪个状态要干净得多。

您也可以考虑使用模型装饰器,例如laracasts/presenter

将该条件逻辑推送到演示者类中。

use Laracasts\Presenter\Presenter;

class DestinationPresenter extends Presenter {

    public function status(): string
    {
        if ($this->isOnTime()) {
            return 'On Time';
        }

        if ($this->isOnHold()) {
          return 'On Hold';
        }
    }

}

然后在您看来,您可以真正简化事情:

{{ $destination->present()->status }}

推荐阅读