Symfony 地图表单字段

aur*_*535 1 forms symfony-forms symfony

我正在 Symfony 上重写旧的已弃用的 REST API,问题是如何在 Symfony 表单上映射和验证具有不同名称的字段。

一个例子,我有 Symfony 表单,其中包含字段:

->add('receiverCity', TextType::class, ['constraints' => new NotBlank()])
->add('receiverCountry', TextType::class, ['constraints' => new NotBlank()])
->add('receiverPostCode', TextType::class, ['constraints' => new NotBlank()])
Run Code Online (Sandbox Code Playgroud)

在请求的控制器中,我得到具有不同名称的相同字段,例如:

$data = ['city' => 'My city', 'country' => 'My country', 'postal' => 'My post code'];
Run Code Online (Sandbox Code Playgroud)

然后我手动提交表单$form->submit($data)。问题是在表单中映射和验证该字段的最佳方法是什么?我应该使用表单事件还是有更简单的方法来做到这一点?

Tob*_* Xy 5

您可以使用该property_path选项。(另请参阅Symfony 文档以获取更多信息)。

您需要使用“旧”字段名称作为表单字段名称,并将 设为property_path对象内的实际字段名称:

->add('city', TextType::class, 
    [
        'constraints' => new NotBlank(),
        'property_path' => 'receiverCity'
    ]
)
->add('country', TextType::class,
    [
        'constraints' => new NotBlank(),
        'property_path' => 'receiverCountry'
    ]
)
->add('postal', TextType::class, 
    [
        'constraints' => new NotBlank(),
        'property_path' => 'receiverPostCode'
    ]
)
Run Code Online (Sandbox Code Playgroud)