Не удается отправить форму с помощью 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")
Дополнительную информацию вы можете найти в документации по маршрутизации:
Ты должен сделать это таким образом
{{ method_field('PUT') }}
@csrf_field
Если вы используете метод PUT для обновления, вы должны указать его перед полем csrf. Спуфинг метода должен быть написан до csrf.
Надеюсь, теперь это сработает.