Как правильно отправить запрос PUT / UPDATE на контроллер в Laravel - PullRequest
1 голос
/ 25 мая 2019

Итак, в настоящее время я пытаюсь изменить функциональность пароля в своем профиле пользователя, но у меня есть некоторые проблемы, связанные с запросом 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>

Controller.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 поля.

1 Ответ

3 голосов
/ 25 мая 2019

Вы можете отправлять данные на свои входы, добавляя к ним атрибут name. Чтобы все ваши входы работали правильно, вам нужно добавить name ко всем из них. Пример таков:

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

Обратите внимание, что для отправки данных недостаточно идентификатора. Для идентификации входа вам потребуется name.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...