You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在spatie/laravel-data中声明字符串或整数数组属性?

解决spatie/laravel-data中声明原生类型数组属性的问题

你遇到的错误是因为DataCollection和DataCollectionOf注解专门用于处理Spatie Data类实例的集合,而string::class是原生类型,不属于Data对象,因此两者不兼容。以下是两种正确的实现方式:

方式一:直接声明原生数组类型(最简方案)

如果仅需接收字符串/整数数组,无需额外验证逻辑,直接使用array类型即可:

class ExampleData extends Data
{
    public function __construct(
        public ?string $someProperty,
        public ?array $countries = null
    ) {}
}

这种写法可以直接解析你提供的JSON请求负载,自动将["en", "de"]映射到$countries属性。

方式二:用ArrayType注解做严格类型验证

如果需要确保数组内的元素都是指定的原生类型(比如必须全为字符串),可以使用ArrayType注解做约束:

use Spatie\LaravelData\Attributes\Validation\ArrayType;

class ExampleData extends Data
{
    public function __construct(
        public ?string $someProperty,
        // 约束数组元素必须为字符串
        #[ArrayType(['string'])]
        public ?array $countries = null
    ) {}
}

如果是整数数组,只需把['string']替换为['integer']即可。该注解会自动验证输入数组的元素类型,不符合要求时会抛出验证错误。

注意:DataCollection仅适用于存放自定义的Data对象集合,原生类型数组无需使用它,用普通array类型搭配注解就足够满足需求。

内容的提问来源于stack exchange,提问作者user275157

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 00:44:53