簡體   English   中英

將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"}"

在我的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM