Symfony 4 FOSuserbundle - 通过React-Redux Axios提交表单

时间:2018-03-16 17:12:31

标签: php reactjs symfony fosuserbundle axios

我正在构建一个使用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'}
        })
}
}

所以,我确实有格式化问题,但我似乎无法正确安排。

由于

1 个答案:

答案 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)
}
}