В последнее время классы действий стали более популярными, и все больше разработчиков решили их использовать.
По сути, классы действий Laravel — это мини-сервисы, которые мы используем для отделения любых действий друг от друга (точно так же, как принцип единой ответственности).
Действия будут пытаться сделать код чище и проще, и когда у вас есть веб-приложение, которое становится все больше и больше, классы действий могут помочь вам упростить разработку системы!
Есть пара пакетов для использования классов действий в Laravel, но, честно говоря, они нам не обязательно нужны, а хорошо структурированная реализация будет делать то же самое еще лучше!
Представьте, что мы хотим создать очень простую систему, в которой пользователь может зарегистрироваться, войти в систему и иметь профиль. В этом случае мы должны разработать действие для каждого действия системы.
Список возможных действий для этого сценария:
- РегистрацияНовыйПользователь
- ЛогинПользователь
- Обновить пароль пользователя
- Обновить профиль пользователя
Прежде всего, мы создадим папку действий в каталоге приложения и для каждого действия создадим отдельный класс:
- Зарегистрировать нового пользователя
Мы создадим класс действий:
app/Actions/RegisterNewUser.php
Затем связанный контроллер:
php artisan make:controller UserRegisterController
Давайте напишем метод store
для UserRegisterController
, и для проверки запроса мы должны создать указанный тип запроса, поэтому мы запускаем эту ремесленную команду:
php artisan make:request StoreUserRequest
После этого на UserRegisterController
: (RegisterNewUser
наш класс действий)
И любой класс действий должен иметь функцию handle()
для реализации соответствующей логики, например:
Ну вот и все наше первое действие.
Давайте сделаем еще один, чтобы понять это лучше.
2. Обновить пароль пользователя.
Мы создадим Action, Controller и соответствующий Request:
app/Actions/UpdateUserPassword.php
php artisan make:controller ForgotPasswordController
php artisan make:request UserForgotPasswordRequest
На этом контроллере имеем:
Итак, класс действия будет:
ЧИТАТЬ ДАЛЕЕ: