[英]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"}"
在我的 controller (在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 組件但沒有成功,現在想知道我是否遺漏了什么,或者是否應該在提交之前在 JS 中修復數據。 可能有內置解決方案嗎?
如果我沒記錯的話,您是使用 AJAX 提交的。 並且您可以在 AJAX API 請求中直接將 FormData object 指定為正文。 在后端,您將根據您的請求方法在 $_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
)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.