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

zzoitvuj  于 2023-06-28  发布在  PHP
关注(0)|答案(1)|浏览(126)

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

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

public static function getConditionTypes(): array
{
    return array_column(ConditionType::cases(), 'name');
}

枚举类:

enum ConditionType: string
{
    case NEW = "NEW";
    case USED = "USED";
    case CRASHED = "CRASHED";
    case BROKEN = "BROKEN";
    case FOR_PARTS = "FOR_PARTS";
}

当我试图通过Postman传递一个值错误的conditionType时,例如"conditionType": "rand",它通过DTO没有任何问题,我试图捕捉是否有错误的值。我错过了什么?

bnl4lu3b

bnl4lu3b1#

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

相关问题