【问题标题】:Axios put error 500 saying field cannot be emptyaxios put error 500 说字段不能为空
【发布时间】:2020-09-20 07:26:27
【问题描述】:

所以我试图从管理面板更新用户,我通过 v-model 从表单中获取值,然后我使用 FormData() 中的所有数据执行我的 axios.put。问题是我收到一个错误 500,说 x 字段不能为空,所以我猜我的 FormData() 没有被传递给控制器​​。 我尝试使用 post 方法,效果很好。所以我想知道我做错了什么? 这是 Vuejs 代码:

<script>
export default {
    data () {
      return {
        search: '',
        headers: [
          { text: 'ID', align: 'start', value: 'id'},
          { text: 'Name', value: 'name' },
          { text: 'Profile', value: 'profile' },
          { text: 'Email', value: 'email' },
          { text: 'Created At', value: 'created_at' },
          { text: 'Actions', value: 'actions' },
        ],
        users: null,
        editedUser: null,
        dialog: false,
      }
    },
    methods: {
        getUsers(){
            axios.get('../admin/getUsers')
        .then(response => this.users = response.data)
        },
        editUser(item){
          this.editedUser = item;
          this.dialog = true;
        },
        submitEditedUser(){
        let data = new FormData();

        data.append('id', this.editedUser.id)
        data.append('name', this.editedUser.name)
        data.append('profile', this.editedUser.profile)
        data.append('email', this.editedUser.email)

          axios.put('../admin/updateUser/' + this.editedUser.id, data)
          .then(res => {
          console.log('done');
          })
          .catch(err => {
          console.log('changes failed');
          })
        }
    },
    mounted(){
        this.getUsers();
    }

  }
</script>

这是控制器代码:

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function updateUser($id, Request $request)
    {
        $user = User::find($id);

        $user->name = request('name');
        $user->profile = request('profile');
        $user->email = request("email");

        $user->save();
    }

post 一切正常,所以变量或表单没有问题,我认为这真的只是没有传递的数据。虽然我想使用 put 方法,因为它最初用于更新数据。 谢谢!

【问题讨论】:

  • 您不能只为您传递给axios.put(...)data 属性使用原始javascript 对象吗? FormData 通常只对二进制数据和文本数据的混合是必需的。

标签: laravel vue.js


【解决方案1】:

你可以试试这个吗?如果这不起作用,您可以在控制器内 dd(request) 并查看是否为空

public function updateUser($id, Request $request)
{

    $user = User::find($id);

    $user->name = $request->data['name'];
    $user->profile = $request->data['profile'];
    $user->email = $request->data['email'];

    $user->save();
}

【讨论】:

  • 我尝试了这个,但仍然遇到同样的问题,所以我 dd(request) 并且我可以看到带有正确信息的 FormData。
猜你喜欢
  • 1970-01-01
  • 2019-07-08
  • 2019-06-19
  • 2022-01-05
  • 2022-08-20
  • 1970-01-01
  • 2020-12-10
  • 1970-01-01
  • 2018-11-07
相关资源
最近更新 更多