PHP Spatie DTO与子数组



我正在尝试使用Spatie的PHP数据传输对象包为Audd音频检测API实现一个端点(带结果的回调(。为此,我有一个PlayDTO,它有一个PlayResultDTO属性,而这个属性又应该有一个作为子属性的PlayTrackDTO数组:

// PlayDTO.php
namespace AppDTOPlay;
use SpatieDataTransferObjectDataTransferObject;
class PlayDTO extends DataTransferObject
{
public string $status;
public PlayResultDTO $result;
}
//PlayResultDTO.php
namespace AppDTOPlay;
use SpatieDataTransferObjectDataTransferObject;
class PlayResultDTO extends DataTransferObject
{
public int $radio_id;
public string $timestamp;
public int $play_length;
/** @var PlayTrackDTO[] */
#[CastWith(ArrayCaster::class, itemType: PlayTrackDTO::class)]
public array $results;
}
// PlayTrackDTO.php
namespace AppDTOPlay;
use SpatieDataTransferObjectDataTransferObject;
class PlayTrackDTO extends DataTransferObject
{
public string $artist;
public string $title;
public string $album;
public string $release_date;
public string $label;
public int $score;
public string $song_link;
}

当我将有效的数据数组传递给我的PlayDTO构造函数时,在新建立的PlayDTO类中,$result正确地具有类型PlayResultDTO,但在该$result中,它的$results属性只是键控数组的简单数组,而它应该是PlayTrackDTO对象的数组。

据我所见,我正确地遵循了指南。我安装了最新版本的软件包,并且使用了PHP8。有人有什么建议吗?感谢

您需要使用CastWith类形式的空间属性。此外,您正在使用ArrayCaster,因此您也需要使用它。

use SpatieDataTransferObjectCastersArrayCaster;
use SpatieDataTransferObjectAttributesCastWith;

最新更新