Контроллеры в Laravel
Laravel использует шаблон Model-View-Controller (MVC):
- View: отвечает за HTML-шаблоны.
- Model: отвечает за работу с базой данных.
- Controller: объединяет View и Model, обрабатывая данные и взаимодействуя с базой данных.
Создадим контроллер для обработки данных из формы. Используем Artisan:
php artisan make:controller ContactController
Это создаст файл ContactController.php в папке app/Http/Controllers. Название контроллера (например, ContactController, UsersController, HomeController) обычно отражает его назначение.
Добавим в ContactController.php функцию submit:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class ContactController extends Controller
{
public function submit(Request $req)
{
return 'ok';
}
}
Обновим resources/views/contact.blade.php:
<form method="POST" action="{{ route('contact') }}">
<!-- форма -->
</form>
Замените <!— форма —> на код формы. В routes/web.php добавим маршрут:
Route::post('/contact', [ContactController::class, 'submit'])->name('contact');
После отправки формы отобразится «ok».
Модифицируем функцию submit для получения данных из формы:
public function submit(Request $req)
{
return $req->all();
}
После отправки формы отобразится массив переданных данных. Для доступа к конкретному полю используйте метод input():
public function submit(Request $req)
{
return $req->input('subject');
}
Это выведет значение поля subject.
Валидация данных
Валидация в Laravel:
$validated = $req->validate([
'subject' => 'required|min:5|max:50',
'message' => 'required|min:15|max:500'
]);
- required: поле обязательно.
- min:5: минимум 5 символов.
- max:50: максимум 50 символов.
Добавим вывод ошибок в resources/views/contact.blade.php:
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
При неудачной валидации отобразятся ошибки.
Дополнительные правила валидации
Официальная документация Laravel содержит множество дополнительных правил (ссылка в описании), например, date, after:tomorrow.
Создание отдельного файла для валидации
Для удобной валидации создадим отдельный файл с помощью Artisan:
php artisan make:request ContactRequest
Это создаст файл ContactRequest.php в папке app/Http/Requests. Определим правила валидации:
<?php
namespace AppHttpRequests;
use IlluminateFoundationHttpFormRequest;
class ContactRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'subject' => 'required|min:5|max:50',
'message' => 'required|min:15|max:500',
'email' => 'required|email',
'name' => 'required',
];
}
public function attributes()
{
return [
'name' => 'Имя',
];
}
public function messages()
{
return [
'name.required' => 'Поле Имя является обязательным',
'email.required' => 'Поле Email является обязательным',
'subject.required' => 'Поле Тема является обязательным',
'message.required' => 'Поле Сообщение является обязательным',
];
}
}
Изменим ContactController:
public function submit(ContactRequest $request)
{
// ...
}
Валидация будет выполняться автоматически.
В этом уроке мы научились создавать контроллеры, обрабатывать данные из форм и выполнять валидацию данных. В следующем уроке рассмотрим модели и добавление данных в базу данных.