引言
php 8 引入了 enum 类型,相信有接触 Java, Python, ...等其他语言的大大们对 enum 并不陌生。这次将利用 enum 更有效的管理下拉选单的选项,提高程式码的可读性和可维护性。
以下将示範如何建立一个“性别”的下拉选单,并在 Laravel 9+ 中应用它,充分发挥 PHP 8 的新功能。
下拉选项定义
使用方法很像定义常数const MALE = 'male'
,把我们需要的选项都列出来。之后如果想要新增选项或是调整值都在这边设定。
enum Gender: string{ case MALE = 'male'; case FEMALE = 'female'; case OTHER = 'other';}
核心程式码
主要有两块,分别为列出下拉选项options()
以及显示已选项目text()
。而resolveEnumClass()
以及trans()
可以根据自己的结构做调整。
options('gender')
取得App\Enums\Gender
里面所有的 cases 并将它翻译输出阵列。text('gender', 'male')
将指定的选项值转为文字。class DropdownManager{ public function options(string $enum): array { $class = $this->resolveEnumClass($enum); $enumCases = $class::cases(); $options = array_reduce($enumCases, function ($options, $enumCase) { Arr::set($options, $enumCase->value, $this->trans($enumCase)); return $options; }, array()); return $options; } public function text(string $enum, mixed $value): string { $class = $this->resolveEnumClass($enum); $enumCase = $class::from($value); return $this->trans($enumCase); } private function resolveEnumClass(string $enum): string { return 'App\\Enums\\' . Str::ucfirst($enum); } private function trans(mixed $enumCase): string { return trans('enums.' . Str::lower($enumCase->name)); }}
使用方式
请使用Helper
或是Facade
注册DropdownManager
,这边以Facade
注册并命名为Dropdown
,使用 Laravel Blade 为範例,在新增以及修改页面显示下拉选单。
<select name="gender"> @foreach(Dropdown::options('gender') as $optionValue => $optionLabel) <option value="{{ $optionValue }}">{{ $optionLabel }}</option> @endforeach</select>
在查看页面显示已选项目。
<p>{{ Dropdown::text('gender', $user->gender) }}</p>
总结
在管理下拉选单的选项时,选择合适的方法至关重要,而 enum 仅仅是其中之一。根据实际情况和需求来选择最适合的管理方式。希望本文能帮助您更好地理解 enum 的应用,无论採用哪种方式,最终目标还是确保程式码的品质!