В последнее время классы действий стали более популярными, и все больше разработчиков решили их использовать.

По сути, классы действий Laravel — это мини-сервисы, которые мы используем для отделения любых действий друг от друга (точно так же, как принцип единой ответственности).

Действия будут пытаться сделать код чище и проще, и когда у вас есть веб-приложение, которое становится все больше и больше, классы действий могут помочь вам упростить разработку системы!

Есть пара пакетов для использования классов действий в Laravel, но, честно говоря, они нам не обязательно нужны, а хорошо структурированная реализация будет делать то же самое еще лучше!

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

Список возможных действий для этого сценария:

  1. РегистрацияНовыйПользователь
  2. ЛогинПользователь
  3. Обновить пароль пользователя
  4. Обновить профиль пользователя

Прежде всего, мы создадим папку действий в каталоге приложения и для каждого действия создадим отдельный класс:

  1. Зарегистрировать нового пользователя

Мы создадим класс действий:

  • 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

На этом контроллере имеем:

Итак, класс действия будет:

ЧИТАТЬ ДАЛЕЕ: