我在 Symfony 6.4 中有一个应用程序,我使用属性 MapRequestPayload 来解析传入的数据。到目前为止,它工作正常,但我已经开始使用外部服务(mailgun)来获取一些数据,并且映射
event-data
变量部分存在问题。我无法更改向我发送数据的方式。所以每次我想使用 #[MapRequestPayload]
数据在结构中不能有连字符,否则它不会被映射。
我收到正文请求:
{
'signature': { ... },
'event-data': { ... }
我正在尝试用
#[MapRequestPayload] UpdateEmailStatusInput
来映射它。
我在控制器中使用的构造函数 public function updateStatus(#[MapRequestPayload] UpdateEmailStatusInput $emailStatusInput)
class UpdateEmailStatusInput
{
public function __construct(
#[Assert\NotBlank] public array $signature,
#[Assert\NotBlank] public array $eventData,
) {
}
}
signature 变量工作正常,但 eventData 不起作用(它是空白的):
signature: array:3 []
eventData: null
我无法创建变量
$event-data
,因为 PHP 认为它是 #event(减去)const 数据。
是否有某种配置或工作方法可以使其开箱即用?目前我正在使用常规
$request->getContent()
来获取 event-data
变量。
按照建议使用
SerializedName
解决了该问题。整个结构被解码,甚至结构深处带有连字符的名称。
所以输入类现在看起来像这样:
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Serializer\Annotation\SerializedName;
class UpdateEmailStatusInput
{
public function __construct(
#[Assert\NotBlank]
public array $signature,
#[SerializedName('event-data')]
#[Assert\NotBlank]
public array $event,
) {
}
}
并从控制器调用:
public function updateStatus(#[MapRequestPayload] UpdateEmailStatusInput $emailStatusInput)