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": "[email protected]", "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.