Метод обновления в форме html в laravel

Я пытаюсь обновить входные данные, используя html-форму в laravel:

 <form  action = "{!! route('users.update',['id' => $users->id]) !!}" method = "post">

            <div class = "form-group row">
                <label for = "colFormLabelLg" class = "col-sm-3 col-form-label col-form-label-lg">customer_name</label>
                <div class = "col-sm-10">
                    <input  value = "{{$name}}" class = "form-control form-control-lg"  placeholder = "col-form-label-lg">
                </div>
  <button type = "submit" class = "btn btn-primary btn-lg"  > Edit</button>


            </form>

Все в контроллере работает отлично, однако на странице просмотра я получил эту ошибку:

Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException No message

Что я делаю неправильно?

Покажите нам свой файл маршрута

Exterminator 18.09.2018 13:01

Нужно добавить csrf_token{!! csrf_field() !!}

Exterminator 18.09.2018 13:04

Я добавил это, но все равно та же ошибка @Exterminator

hala 18.09.2018 13:06

Ваш файл маршрута, пожалуйста

Exterminator 18.09.2018 13:13

Route :: resource ('пользователи', 'пользовательский контроллер'); Я использую ресурс маршрута @Exterminator

hala 18.09.2018 13:26

Я изменил метод установки и исправления, но он не обновляется и показывает пустую страницу

hala 18.09.2018 13:58

вам не нужно менять метод, который вам нужен, чтобы подделать его, как я показал в ответе ниже

Exterminator 18.09.2018 13:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
7
1 500
4

Ответы 4

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

Route::post('update/{id}', 'YourController@update')->name('users.update');

Я использую ресурс маршрута, я добавил маршрут, который вы мне дали, он не показывает ошибки, но не обновляет @Saurabh Dhariwal

hala 18.09.2018 13:25

@hala: Я просто привожу вам пример.

user10186369 18.09.2018 13:26

@hala: Пожалуйста, проверьте свой маршрут с помощью php artisan route:list

user10186369 18.09.2018 13:26

@hala: Добавьте <input name = "_method" type = "hidden" value = "PATCH"> в файл лезвия и проверьте

user10186369 18.09.2018 13:37

@hala: пожалуйста, проверьте, что ваш маршрут POST или PATCH в файле маршрута, или проверьте php artisan route:list

user10186369 18.09.2018 13:48

это POST это строка обновления в списке маршрутов POST | обновление / {id} | users.update | Приложение \ Http \ Controllers \ userscontroller @ update | сеть

hala 18.09.2018 13:53

@hala: Измените метод формы в файле лезвия, например <form action = "{{ route('users.update',['id' => $users->id]) }}" method = "post">

user10186369 18.09.2018 13:57

Вам нужно подделать метод, который вы используете для публикации данных. Поскольку HTML-формы не могут выполнять запросы PUT, PATCH, or DELETE, вам нужно будет добавить скрытое поле _method для имитации этих HTTP-глаголов. Директива @method Blade может создать это поле для вас следующим образом:

<form action = "/foo/bar" method = "POST">
    @method('PUT') //add this to your form
</form>

или

<form action = "/foo/bar" method = "POST">
        {{ method_field('patch')}} //add this to your form
</form>

<form action = "{{route ('users.update', ['id' => $ users-> id])}}" method = "POST"> @method ('PUT') // добавьте это в свой form <input name = "_ method" type = "hidden" value = "PATCH"> csrf_token {!! csrf_field () !!} <div class = "form-group row"> <label for = "colFormLabelLg" class = "col-sm-3 col-form-label col-form-label-lg"> имя_клиента </ label > <div class = "col-sm-10"> <input value = "{{$ name}}" class = "form-control form-control-lg" placeholder = "col-form-label-lg"> < / div>

hala 18.09.2018 14:13

Вам нужно поместить @csrf и @method('PATCH') в представление формы.

У меня такая же проблема, и она сработала после добавления нескольких строк в мой код:

  1. Просто используйте $users->id вместо того, чтобы делать это как массив ['id' => $users->id]
  2. Используйте csrf и подделайте метод, добавив @method('PUT')

Ваш код должен выглядеть так:

<form  action = "{!! route('users.update', $users->id) !!}" method = "post">
    @csrf
    <!--Some fields-->
    @method('PUT')
</form>

Другие вопросы по теме