gpt4 book ai didi

php - Laravel Php 8.1 如何将枚举案例转换为数组以选择输入

转载 作者:行者123 更新时间:2023-12-05 04:26:20 25 4
gpt4 key购买 nike

我得到了句点或术语的枚举类:

Term.php

<?php

namespace App\Enums;

enum Term : string
{
case ONE_MONTH = '1 month';
case THREE_MONTHS = '3 months';
case SIX_MONTHS = '6 months';
case TWELVE_MONTHS = '12 months';
}

所以我用转储测试了以下内容

dd(array_map(
fn (Term $term) => $term->value,
Term::cases()
));

它输出:

^ array:4 [▼
0 => "1 month"
1 => "3 months"
2 => "6 months"
3 => "12 months"
]

现在我想将每个值传递到一个选择输入(filamentphp.com),如下所示:

Forms\Components\Select::make('term')->options([
array_map(
fn (Term $term) => $term->value,
Term::cases()
)
//Term::ONE_MONTH->value=>TERM::ONE_MONTH->name
]),

但是我得到以下错误:

Filament\Forms\Components\Select::isOptionDisabled(): Argument #2 ($label) must be of type string, array given,

好吧,看来我需要获得以下语法(如 documentation 中所示):

use Filament\Forms\Components\Select;

Select::make('status')
->options([
'draft' => 'Draft',
'review' => 'In review',
'published' => 'Published',
])

那么,要在输入表单中显示枚举类值,我缺少什么?

最佳答案

刚刚在本地尝试了您的代码,根据您的代码,我看到您正在将一个数组传递给灯丝选择选项。正如错误所述,您应该将字符串传递给标签。但是你正在向它传递一个数组。检查下面的转储,它将传递 0 作为值和数组 ("ONE_MONTH"=> "1 month") 作为标签。

^ array:4 [▼
0 => array:1 [▼
"ONE_MONTH" => "1 month"
]
1 => array:1 [▼
"THREE_MONTHS" => "3 months"
]
2 => array:1 [▼
"SIX_MONTHS" => "6 months"
]
3 => array:1 [▼
"TWELVE_MONTHS" => "12 months"
]
]

只需将枚举映射为键值对即可解决问题

 $terms = [];

foreach (Term::cases() as $value) {
$terms[$value->name] = $value->value;
}

上面的代码会返回一个如下所示的数组

^ array:4 [▼
"ONE_MONTH" => "1 month"
"THREE_MONTHS" => "3 months"
"SIX_MONTHS" => "6 months"
"TWELVE_MONTHS" => "12 months"
]

我已经用我的一个本地项目进行了测试,并看到下面的工作截图和代码

public static function form(Form $form): Form
{

$values = [];

foreach (Term::cases() as $value) {
$values[$value->name] = $value->value;
}
return $form
->schema([
Select::make('terms')
->options($values),

enter image description here

谢谢

关于php - Laravel Php 8.1 如何将枚举案例转换为数组以选择输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73088100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com