首页 > 解决方案 > 如何正确发送 PUT/UPDATE 请求到 Laravel 中的控制器

问题描述

因此,我目前正在尝试对我的用户个人资料进行更改密码功能,但我有一些关于PUT/UPDATE请求正确到达我的UserController的问题。

根据 Laravel 文档,我只需要在表单元素下方添加@csrf@method('PUT')下方,但是当在控制器中发出转储请求时,我可以看到请求到达了我的控制器中的函数,但在提交时它不需要必要的字段。

profile.blade.php

<form method="POST" action="{{route('update-password')}}">
    @csrf @method('PUT')

    <div class="form-group row">
        <label for="old_password" class="col-md-2 col-form-label">{{ __('Current password') }}</label>

        <div class="col-md-6">
            <input id="old_password" type="password" class="form-control" required autofocus >

        </div>
    </div>
    <div class="form-group row">
        <label for="new_password" class="col-md-2 col-form-label">{{ __('New password') }}</label>

        <div class="col-md-6">

            <input id="new_password" type="password" class="form-control" required autofocus >

        </div>
    </div>
    <div class="form-group row">
        <label for="password_confirm" class="col-md-2 col-form-label">{{ __('Confirm password') }}</label>

        <div class="col-md-6">
            <input id="password_confirm" type="password" class="form-control" required autofocus>

        </div>
    </div>
    <div class="form-group login-row row mb-0">
        <div class="col-md-8 offset-md-2">
            <button type="submit" class="btn btn-primary">
                {{ __('Submit') }}
            </button>
        </div>
    </div>
</form>

控制器.php

public function updatePassword(Request $request){

    $this->validate($request, [
        'old_password' => 'required',
        'new_password' => 'required|confirmed',
        'password_confirm' => 'required'
    ]);

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

    if (!Hash::check($request->current, $user->password)) {
        return response()->json(['errors' => ['current'=> ['Current password does not match']]], 422);
    }

    $user->password = Hash::make($request->password);
    $user->save();

    return $user;
}

目前,当提交字段时,它只提交

_token: UcJwliogSngHauWCNuDvRtRnZy8NP4lrQeNoZQGG
_method: PUT

并且只是将重定向(302)返回到个人资料页面。

它应该提交所有 3 个字段。

标签: phplaravel

解决方案


您可以通过向输入添加name属性来发送数据。为了让您的所有输入正常工作,您需要添加name所有输入。它的一个例子是这样的:

<input id="old_password" name="old_password" type="password" class="form-control" required autofocus >

请注意,id 不足以发送数据。对于您需要的输入标识name


推荐阅读