将 Symfony 表单数据序列化为 JSON

Serialize Symfony form data to JSON

使用 Symfony FormsHTML 生成如下所示:

<input type="text" id="form_name" name="form[name]">
<input type="email" id="form_email" name="form[email]">
<textarea id="form_message" name="form[message]"></textarea>

使用一些 JS 条目被转换为 JSON 并提交:

const contactForm = document.getElementById('contact-form');

contactForm.addEventListener('submit', (event) => {
  event.preventDefault();
  const formData = new FormData(event.target);
  const jsonData = JSON.stringify(Object.fromEntries(formData));

  // handle submission... 
})

JSON即发送到后台:

"{"form[name]":"John Doe","form[email]":"example@domain.com","form[message]":"Some message"}"

在我的控制器中(在 PHP 中)我将数据序列化为一个数组:$data = json_decode($request->getContent()); 问题是此数据已格式化(如预期)像这样:

["form[name]" => "John Doe", "form[email]" => "example@domain.com", "form[message]" => "Some message"];

是否有内置方法来获得以下结果(在PHP或JS中)?

[ "name" => "John Doe", "email" => "example@domain.com", "message" => "Some message" ];

我研究过使用 Serializer Component 但没有成功,现在想知道我是否遗漏了什么或者数据是否应该在提交前在 JS 中修复。可能有内置解决方案吗?

如果我没记错的话,您是使用 AJAX 提交的。并且您可以直接将 FormData 对象指定为 AJAX API 请求中的正文。在后端,您将根据您的请求方法在 $_POST 或 $_GET 数组中接收数据。

这是示例代码。

const contactForm = document.getElementById('contact-form');

contactForm.addEventListener('submit', (event) => {
  event.preventDefault();
  const formData = new FormData(event.target);
  fetch('<AJAX API URL>', {
        method: 'POST',
        body: formData
    }).then(function (response) {
        if (response.ok) {
            return response.json();
        }
        return Promise.reject(response);
    }).then(function (data) {
        console.log(data);
    }).catch(function (error) {
        console.warn(error);
    }); 
})
<form id="contact-form">
  <input type="text" name="form['name']" />
  <input type="text" name="form['job']" />
  <input type="submit" value="submit" />
</form>

以下是获取 POST 数组中数据的方法。

Array
(
    [form] => Array
        (
            ['name'] => 123
            ['job'] => 123123
        )

)