Ресурс Laravel Route не обновляется при публикации формы - PullRequest
0 голосов
/ 04 января 2019

Я использую Laravel 5.6 и MySQL.Я собираюсь обновить таблицу учеников, используя следующую функцию контроллера:

public function update(Request $request, $id)
    {
        $students = Student::find($id);
        $students->name = $request->input('name');
        $students->town = $request->input('town');
        $students->save();
 } 

, и действие формы обновления выглядит так:

<form action="{{route('student.update',$students->id)}}" method="POST">
    {{csrf_field()}}

, и мой маршрут определяется следующим образом:

Route::resource('student','StudentController');

Моя проблема в том, что когда я нажимаю кнопку обновления в форме, она генерирует следующее сообщение об ошибке

1/1) MethodNotAllowedHttpException

Что не так?

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Проверьте свой маршрут, выполнив команду:

php artisan route:list

и проверьте, не отправлен ли ваш запрос с помощью 'PUT or PATCH'

Я вижу васпытаемся обновить $ student .Так что вместо этого $student->save()

Вы можете сделать это так:

public function update(Request $request, $id)
    {
       try
      {
        $input = $request->all();

        $student = Student::where('id',$id)->update($input);

        return $student;

     }catch(QueryException $ex) {
        return ['success'=>false, 'error'=>$ex->getMessage()];
    }
 } 
0 голосов
/ 04 января 2019

Вы используете неправильный метод HTTP, метод update на Route::resource маршруте требует, чтобы запрос отправлялся с помощью метода HTTP PUT / PATCH.

Поскольку формы HTTP не поддерживают метод PUT / PATCH в качестве используемого вами методадолжен подделывать HTTP-метод, используя директиву Blade @method('PUT') внутри формы.

<form action="{{route('student.update',$students->id)}}" method="POST">
    {{csrf_field()}}

    {!! @method('PUT') !!}
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...