Не удается отправить форму с помощью POST

Недавно новая установка laravel. Попытка отправить минимальную базовую форму с помощью POST. Получите ошибки, как показано ниже. Попробуйте описанные ниже сценарии, но ни один из них не приведет к успешной обработке формы.

Моя форма

 <form method="post" action="/form_populating_data">

   @csrf_field
   {{ method_field('PUT') }}

  <?php foreach ($array as $key => $value): ?>

    <label
    for= <?php echo "'{$key}'" ?>
    >
    <?php echo "{$key}" ?>
    </label>

    <input
    type="text"
    id="1"
    value= <?php echo "{$value}" ?>
    >

    <br>

  <?php endforeach; ?>


  <input type="submit" name="" value="Save">

</form>

Тесты для поиска и устранения неисправностей

Начальная точка, продолжайте "получать" [routes/web.php]

Route::get('/form_populating_data', function () {
    return view('site_tax_declarations/form_populating_data');
});

Результат:

The POST method is not supported for this route. Supported methods: GET, HEAD. 

Отрегулируйте, измените на "post" [routes/web.php]

Route::post('/form_populating_data', function () {
    return view('site_tax_declarations/form_populating_data');
});

Результат:

The GET method is not supported for this route. Supported methods: POST. 

Отрегулируйте [form.php], оставьте [Route:get]

Между тегами POST добавлено следующее:

@csrf_field
{{ method_field('PUT') }}

Результат:

Метод PUT не поддерживается для этого маршрута. Поддерживаемые методы: GET, HEAD.


Отрегулируйте [form.php], измените на [Route:post]

Между тегами POST добавлено следующее:

@csrf_field
{{ method_field('PUT') }}

Результат:

Метод PUT не поддерживается для этого маршрута. Поддерживаемые методы: POST.


Настройте [form.php], обновите [Route:get] с помощью action="/form_populating_data"

Удалено:

@csrf_field
{{ method_field('PUT') }}

Результат:

The PUT method is not supported for this route. Supported methods: GET, HEAD. 

2 ответа

Я думаю, что есть недопонимание в том, как работает Http Request. Вам нужен один маршрут для доставки формы пользователю:

Route::get('/form_populating_data', function () {
    return view('site_tax_declarations/form_populating_data');
});

В вашей форме вы используете маршрут для обработки данных, например <form action="/process-data' method="post">.

Затем вам понадобится почтовый маршрут с этой конечной точкой:

Route::post("/process-data", function (Request $request) {
  dd($request->input());
});

Примечание: введение Request в обработчике маршрута.

Затем ввод POST доступен в $request->input().

РЕДАКТИРОВАТЬ: поля вашей формы нуждаются в name атрибут как <input name="message">. Тогда значения доступны с$request->input("message")

Дополнительную информацию вы можете найти в документации по маршрутизации:

https://laravel.com/docs/7.x/routing

Ты должен сделать это таким образом

  {{ method_field('PUT') }}
  @csrf_field

Если вы используете метод PUT для обновления, вы должны указать его перед полем csrf. Спуфинг метода должен быть написан до csrf.

Надеюсь, теперь это сработает.

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