Метод PUT в форме html

109
17 ноября 2019, 00:40

Есть страница, сверстанная на bootstrap'е. На ней есть форма для редактирования пользователя, но при нажатии на кнопку "Сохранить" возникает ошибка без сообщения (MethodNotAllowedHttpException, No message), в чём проблема? Моя форма:

<form class="form-signin" method="PUT" action="{{ route('users.updateuser', $user->id) }}">
  <h1 class="h3 mb-3 font-weight-normal">{{__('Edit Profile')}}</h1>
  <input id="name" type="text" class="form-control{{ $errors->has('name') ? ' is-invalid' : '' }}" name="name" value="{{ $user->name }}" placeholder="Имя" required autofocus>
  @if ($errors->has('name'))
      <span class="invalid-feedback" role="alert">
          <strong>{{ $errors->first('name') }}</strong>
      </span>
  @endif
  <input id="fam" type="text" class="form-control{{ $errors->has('fam') ? ' is-invalid' : '' }}" name="fam" value="{{ $user->fam }}" placeholder="Фамилия" required autofocus>
  @if ($errors->has('fam'))
      <span class="invalid-feedback" role="alert">
          <strong>{{ $errors->first('fam') }}</strong>
      </span>
  @endif
  <input id="patr" type="text" class="form-control{{ $errors->has('patr') ? ' is-invalid' : '' }}" name="patr" value="{{ $user->patr }}" placeholder="Отчество">
  @if ($errors->has('patr'))
      <span class="invalid-feedback" role="alert">
          <strong>{{ $errors->first('patr') }}</strong>
      </span>
  @endif
  <input id="email" type="email" class="form-control{{ $errors->has('email') ? ' is-invalid' : '' }}" name="email" value="{{ $user->email }}" disabled placeholder="Адрес эл. почты" required>
  @if ($errors->has('email'))
      <span class="invalid-feedback" role="alert">
          <strong>{{ $errors->first('email') }}</strong>
      </span>
  @endif
  <a href="{{route('login')}}" >{{__('Change password')}}</a>
  <button class="btn btn-lg btn-primary btn-block" type="submit">{{__('Save')}}</button>
  <a href="{{route('login')}}" style="color: red;">{{__('Delete account')}}</a>
  <p class="mt-5 mb-3 text-muted">&copy; Колганов Сергей, 2019</p>
  <input id="gender_id" type="hidden" class="form-control{{ $errors->has('gender_id') ? ' is-invalid' : '' }}" name="gender_id" value="{{ '3' }}" required autofocus>
  <input id="role_id" type="hidden" class="form-control{{ $errors->has('role_id') ? ' is-invalid' : '' }}" name="role_id" value="{{ '6778' }}" required autofocus>
  <input id="userstat_id" type="hidden" class="form-control{{ $errors->has('userstat_id') ? ' is-invalid' : '' }}" name="userstat_id" value="{{ '1' }}" required autofocus>
</form>

Маршрут:

Route::put('users/{user}/updateuser', 'StationController@updateuser')
      ->name('users.updateuser');
Answer 1

Для реализации CRUD приложения в Laravel можно сделать такой роутинг:

Route::resource('tasks', 'TaskController');

Или в ручную:

Route::put('tasks', function()
    {
    });

В html:

<form action="{{ route('route_name') }}" method="post">
    {{ method_field('PUT') }}
    {{ csrf_field() }}
</form>

Или так:

<form action="{{ route('route_name') }}" method="post">
    <input type="hidden" name="_method" value="PUT">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>

А ещё ответ есть тут .

Answer 2

В соответствии со стандартами method у формы может быть только get, post или dialog w3.org

Соответственно браузер отправляет post вместо put, а соответствующего маршрута у вас нет

Лучше добавьте $user->id в качестве hidden input в саму форму и отправьте post

Answer 3

Ещё один способ решения нашёлся: создать форму через blade шаблон, думаю так проще :)

    {{
    Form::model($user, ['class' => 'form-signin',
        'method' => 'PUT',
        'route'  => [
            'users.updateuser',
            $user->id,
        ]
    ])
}}
  {{
      Form::submit(
          __('Save'),
          [
              'class' => 'btn btn-lg btn-primary btn-block',
          ]
      )
  }}  {{Form::close()}}
READ ALSO
c++: записать в строку через stream

c++: записать в строку через stream

Подскажите, как можно в строку разместить вывод:

145
Возможно ли использование оператора == в std::enable_if? &lt;type_traits&gt;

Возможно ли использование оператора == в std::enable_if? <type_traits>

Предположим есть реализация шаблона проектирования object pool

129
Ошибка в методе шаблона класса. С++

Ошибка в методе шаблона класса. С++

Константные функции лучше делать константными:

121
Перегрузка оператора == и шаблоны

Перегрузка оператора == и шаблоны

Почему присутствие структуры Hard Logic приводит к ошибке компиляции, а структуры SoftLogic — нет?

112