Давайте теперь сделаем одно действие и для показа формы, и для ее последующей обработки. Для этого в маршрутах мы должны разрешить обращение к методу контроллера и методом GET, и методом POST:
<?php
Route::post('/form', [PostController::class, 'form']);
Route::get('/form', [PostController::class, 'form']);
?>
В приведенном выше коде у нас все дублируется, кроме имени метода. В этом случае эти два роута можно объединить в один следующим образом:
<?php
Route::match(['get', 'post'], '/form', [PostController::class, 'form']);
?>
В самой форме мы должны исправить значение
атрибута action
, чтобы форма отправлялась
на текущую страницу:
<form action="" method="POST">
@csrf
<input name="title">
<input name="slug">
<input type="submit">
</form>
Давайте теперь реализуем наше действие.
Его код будет выполнятся два раза.
При первом заходе мы просто должны показать
форму, а после ее отправки - обработать
ее данные.
Разрулим оба варианта с помощью условия.
В этом нам поможет метод has
,
проверяющий наличие данных инпута
в объекте запроса. Реализуем:
<?php
class PostController extends Controller
{
public function form(Request $request)
{
if ($request->has('title') and $request->has('slug')) {
dump($request->input('title'));
dump($request->input('slug'));
}
return view('post.form');
}
}
?>
С помощью формы спросите у пользователя его город и страну. После отправки формы выведите эти данные над формой в отдельном абзаце.