php - 如何使用简化的选择框 IF 语句 PHP
问题描述
我有一个行程状态页面,我想输出行程的状态。
我在创建行程时将数值存储在数据库中。
状态值:
- 0 = 准时
- 1 = 保持
- 2 = 延迟
- 3 = 完成
- 4 = 取消
这是我目前工作的 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?
解决方案
您无法将具有 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 }}
推荐阅读
- arrays - 在 NumPy 中计算自协方差函数向量而不使用 np.correlate
- java - 同步 Gradle 失败:错误:对于输入字符串:“”
- r - 使用 sf/mapview 连接两组坐标以创建线条
- laravel-5 - 如果至少一个字段已更改,如何更新一行 - 并返回 laravel 5.7 中的所有更改?
- android - Recyclerview 广告
- c++ - R包与Rcpp的链接错误:“未定义符号:LAPACKE_dgels”
- dc.js - 如何在 barChart 栏的标签中显示与 valueAccessor 不同的值?
- python - 如何在pyqt5中使用飞溅效果动态切换屏幕
- python - 在 Python 中解码一列 Base64 字符串
- reactjs - Material UI 调色板为主题添加了额外的颜色,并以与 Primary/Secondary 相同的方式使用它