MapRequestPayload 无法使用连字符访问信息

问题描述 投票:0回答:1

我在 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
变量。

php json symfony request mapping
1个回答
0
投票

按照建议使用

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)

© www.soinside.com 2019 - 2024. All rights reserved.