我正在构建一个使用Symfony 4作为后端的PWA,并使用FOSUserbundle来管理用户。
使用redux-form和Axios提交注册表时,不会根据需要发布信息。
这就是我在Firefox发布的devtools网络标签中看到的内容;
{"fos_user_registration_form[email]":"email@gmail.com",
"fos_user_registration_form[plainPassword[first]":"password",
"fos_user_registration_form[plainPassword[second]":"password",
"fos_user_registration_form[username]":"username"}
这就是$ _POST的转储在控制器中显示的内容:
array(1){[" {" fos_user_registration_form"] => array(1){[" email"] => string(0)"" }}
正确的$ _POST输出应该是(使用常规Symfony / FOSUserbundle表单发布时):
array(1){[" fos_user_registration_form"] => array(3){[" email"] => string(22)" email@gmail.com" ["用户名"] => string(8)" username" [" plainPassword"] => string(8)" Array(2)" }}
在处理下面帖子的Redux操作中,我使用了我在常规'上观察到的相同HTTP标头。 Symfony / FOSUserbundle发布请求:
export function actionSubmitRegister(values){
const url = "/register/";
return {
type: SUBMIT_REGISTER,
payload: axios.post(url,{
"fos_user_registration_form[email]": values.fos_user_registration_form['email'],
"fos_user_registration_form[plainPassword][first]": values.fos_user_registration_form['plainPassword']['first'],
"fos_user_registration_form[plainPassword][second]": values.fos_user_registration_form['plainPassword']['second'],
"fos_user_registration_form[username]": values.fos_user_registration_form['username']},
{
headers: {
'Accept':'text/html,application/xhtml+xml',
'Content-Type':'application/x-www-form-urlencoded'}
})
}
}
所以,我确实有格式化问题,但我似乎无法正确安排。
由于
答案 0 :(得分:0)
似乎Axios无法处理内容类型':' application / x-www-form-urlencoded'尽管接受了header参数。
根据documentation,需要使用URLSearchParameters来实现这一目标。此外,还需要使用polyfill来解决不支持它的常见嫌疑人(IE)。
因此,Redux操作的代码应如下所示(不使用polyfill):
export function actionSubmitRegister(values){
const url = "/register/";
let data = new URLSearchParams();
data.append("fos_user_registration_form[email]", values.fos_user_registration_form['email']);
data.append("fos_user_registration_form[plainPassword][first]", values.fos_user_registration_form['plainPassword']['first']);
data.append("fos_user_registration_form[plainPassword][second]", values.fos_user_registration_form['plainPassword']['second']);
data.append("fos_user_registration_form[username]",values.fos_user_registration_form['username']);
return {
type: SUBMIT_REGISTER,
payload: axios.post(url, data)
}
}