将 Symfony 表单数据序列化为 JSON
Serialize Symfony form data to JSON
使用 Symfony Forms,HTML 生成如下所示:
<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
)
)
使用 Symfony Forms,HTML 生成如下所示:
<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
)
)