https://itproger.com/course/laravel/3
В файле contact.blade.php создаём форму:
<form action="/contact/submit" method="post">
@csrf
<div class="form-group">
<label for="name">Введите имя:</label>
<input type="text" name="name" placeholder="Введите имя" id="name" class="form-control">
</div>
<div class="form-group">
<label for="email">Email:</label>
<input type="text" name="email" placeholder="Введите email" id="email" class="form-control">
</div>
<div class="form-group">
<label for="subject">Тема сообщения:</label>
<input type="text" name="subject" placeholder="Введите имя" id="subject" class="form-control">
</div>
<div class="form-group">
<label for="message">Тема сообщения:</label>
<textarea name="message" id="message" cols="30" rows="10" class="form-control" placeholder="Введите сообщение..."></textarea>
</div>
<button class="btn btn-success" type="success">Отправить</button>
</form>
@csrf — это ключ, который служит для проверки подлинности отправки формы. Его нужно обязательно ставить во все формы для корректной отправки.
В routes/web.php пропишем путь для приёма нашей формы:
Route::post('/contact/submit', function () {
return "Окей";
});
Так как форма отправляется методом post, то используем Route::post .
Именование обработчиков URL-адресов
Добавим имя нашему обработчику URL:
Route::post('/contact/submit', function () {
return "Окей";
})->name('contact-form');
Теперь в формах можно указывать не URL адрес, а имя обработчика:
<form action="{{route('contact-form')}}" method="post">
Сейчас, при необходимости, можно сменить урл в Route::post(‘/contact/submit’ , и он автоматически поменяется везде, где указано имя нашего обработчика.
Сделаем везде именные обработчики:
Route::get('/', function () {
return view('home');
})->name('home');
Route::get('/about', function () {
return view('about');
})->name('about');
Route::get('/contact', function () {
return view('contact');
})->name('contact');
Route::get('/posts/all', function () {
return view('posts.all');
})->name('post-all');
Теперь везде можно использовать, как прямые урлы, так и именованные пути, но рекомендуется именованные пути.
Изменим в файле app.blade.php :
<a class="p-2 text-dark" href="{{route('home')}}">Главная</a>
<a class="p-2 text-dark" href="{{route('contact')}}">Контакты</a>
<a class="p-2 text-dark" href="{{route('about')}}">О сайте</a>
На сайте ничего поменяться не должно.
При отправке формы выведем все данные, которые мы отправляем формой. В routes/web.php запишем:
Route::post('/contact/submit', function () {
return Request::all();
})->name('contact-form');
Выводится должно то, что Вы впишите в форму, т.е. :
{
"_token": "PNaY7U3JctdYNGK2muinJTJi0fLSSYn76x1SFHeM",
"name": "Дмитрий",
"email": "mymail@mail.ru",
"subject": "Дмитрий",
"message": "Привет, это я!"
}
Передача формы методом get
Для этого вставим в method в contact.blade.php get вместо post :
<form action="{{route('contact-form')}}" method="get">
И в route/web.php также поменяем:
Route::get('/contact/submit', function () {
return Request::all();
})->name('contact-form');
Теперь форма будет передаваться get методом, и наши данные будут видны в url.