Laravel: Контроллеры и Валидация данных

Контроллеры в 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)
{
    // ...
}

Валидация будет выполняться автоматически.

В этом уроке мы научились создавать контроллеры, обрабатывать данные из форм и выполнять валидацию данных. В следующем уроке рассмотрим модели и добавление данных в базу данных.

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