我正在尝试使用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;