使用 [#Assert\Choice] 验证枚举类型

ves*_*lov 2 php symfony

我正在尝试验证自定义 DTO 类中的枚举类型。我正在尝试使用 Symfony#[Assert\Choice]属性,但如果传递错误的值,它似乎不起作用。

自定义 DTO:

#[Assert\Choice(callback: 'getConditionTypes')]
public string $conditionType;

public static function getConditionTypes(): array
{
    return array_column(ConditionType::cases(), 'name');
}
Run Code Online (Sandbox Code Playgroud)

枚举类:

enum ConditionType: string
{
    case NEW = "NEW";
    case USED = "USED";
    case CRASHED = "CRASHED";
    case BROKEN = "BROKEN";
    case FOR_PARTS = "FOR_PARTS";
}
Run Code Online (Sandbox Code Playgroud)

当我尝试通过 Postman 传递带有错误值的条件类型时,例如 "conditionType": "rand"它通过 DTO 时没有任何问题,并且我试图捕获是否存在错误值。我缺少什么?

ves*_*lov 7

我没有提供回调并使用 Assert\Choice,而是使用#[Assert\Type(type: ConditionType::class)]它自动验证传递的值是否是此枚举的一部分。