Laravel: Создание форм ввода данных (урок 3)

Создадим форму для страницы контактов и научимся получать из неё данные.

Создание HTML-формы

В файле resources/views/contact.blade.php создадим форму <form>:

<form action="/contact/admin" method="post">
</form>

Атрибут action указывает URL-адрес для обработки данных формы (/contact/admin). Атрибут method устанавливаем в post. Обработчик этого URL-адреса создадим позже.

Добавим поля ввода данных, используя класс form-group из Bootstrap для стилизации:

<div class="form-group">
  <label for="name">Введите имя</label>
  <input type="text" name="name" id="name" placeholder="Введите имя" class="form-control">
</div>

<div class="form-group">
  <label for="email">Email</label>
  <input type="email" name="email" id="email" placeholder="Введите email" class="form-control">
</div>

<div class="form-group">
  <label for="subject">Тема сообщения</label>
  <input type="text" name="subject" id="subject" placeholder="Тема сообщения" class="form-control">
</div>

<div class="form-group">
  <label for="message">Сообщение</label>
  <textarea name="message" id="message" placeholder="Введите сообщение" class="form-control"></textarea>
</div>

<button type="submit" class="btn btn-success">Отправить</button>

HTML-форма готова.

Обработчик URL-адреса и защита от CSRF

В файле routes/web.php создадим обработчик для URL-адреса /contact/admin и добавим защиту от CSRF-атак:

Route::post('/contact/admin', function (IlluminateHttpRequest $request) {
    return $request->all();
})->name('contact.form');

Используем функцию post, так как данные передаются методом POST. Метод name(‘contact.form’) задает имя маршрута. В форму автоматически добавится скрытое поле с токеном CSRF. Получаем все данные из запроса с помощью $request->all().

Использование именованных маршрутов

В файле routes/web.php мы уже добавили имя маршруту contact.form. В шаблоне contact.blade.php используем имя маршрута вместо URL-адреса:

<form action="{{ route('contact.form') }}" method="post">
</form>

Это упрощает изменение URL-адреса – достаточно изменить его только в routes/web.php. В файле resources/views/layouts/app.blade.php (или аналогичном) можно аналогично изменить ссылки в меню.

Вывод данных формы

Для более удобного отображения данных используем функцию dd():

Route::post('/contact/admin', function (IlluminateHttpRequest $request) {
    return dd($request->all());
});

Данные отображаются в читабельном формате, корректно обрабатывая кириллицу.

Мы создали форму для страницы контактов, обработчик URL-адреса, добавили защиту от CSRF-атак, использовали именованные маршруты и научились получать данные из формы.

Что будем искать? Например,программа