Download the PHP package lemax10/simple-actions without Composer

On this page you can find all versions of the php package lemax10/simple-actions. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package simple-actions

Simple Actions

Language: English

Пакет для реализации паттерна простых переиспользуемых действий (Actions) в Laravel приложениях. Вдохновлен Laravel Actions, но не перегружен контекстами. Основной упор сосредоточен на принципе 1 объект экшена = 1 действие. Для упрощения реализации логики с участием множества действий, предусмотрены сценарии (UseCases). Сценарии -- это агрегация множества действий в единый сценарий.

Цель пакета привнести удобство для архитектуры кода, решить некоторые рутинные операции и задачи, но при этом оставаться максимально простым без перегруженности контекста, не раздувая и не размывая ответсвенность объекта.

Установка

Artisan команды генерации

Пакет добавляет команды для быстрого создания заготовок:

Что будет создано:

Можно указать полное имя с суффиксом, если необходимо:

Флаг --force перезапишет существующий файл.

Основные возможности

Быстрый старт

Создание Action

Использование

Idempotency (опционально)

Для защиты от повторного параллельного выполнения одного и того же действия:

Если ключ уже использовался, вернется сохраненный результат без повторного выполнения handle. Если такой же ключ сейчас "в процессе", будет выброшено исключение ActionIdempotencyInProgressException.

По умолчанию используется cache-based репозиторий. Репозиторий можно переключить:

Можно регистрировать собственные idempotency-драйверы через IdempotencyRepositoryManager::extend(...). К примеру если Вам небходимо хранить блокировки в БД или абстрактном хранилище.

UseCase - Сценарии из Actions

UseCase это полноценный Action, агрегирующий другие Actions:

Типизация результата

Чтобы приложение сохраняло строгую типизацию при работе с run() и хелперами action()/usecase(), укажите возвращаемый тип через PHPDoc-дженерик:

false возможен, если выполнение было остановлено в beforeRun/running событии.

События

Цикл жизни событий

Action имеет полный цикл жизни с 5 событиями:

  1. beforeRun - перед началом выполнения
  2. running - непосредственно перед вызовом handle()
  3. ran - после успешного выполнения
  4. failed - при ошибке выполнения
  5. afterRun - всегда выполняется в конце

Регистрация слушателей

Остановка выполнения

События beforeRun и running могут остановить выполнение, вернув false:

Observer паттерн

Создайте observer для группировки логики событий:

Отключение событий

Локальные события для конкретного экземпляра

Если нужно одноразово повесить хук/хуки только на один вызов:

Доступные локальные методы: before (beforeRun), runningLocal (running), then (ran), onFail (failed), after (afterRun). **Возврат false из локальных before/runningLocal останавливает только текущий экземпляр события.

Условные локальные события

Хелперы *When / *Unless запускают локальный колбэк по условию (Boolean или Closure, аргументы — такие же, что и у run):

Unless инвертирует условие, When. Локальные хуки не влияют на другие экземпляры и не добавляют глобальных слушателей или событий.

Транзакции

Автоматические транзакции

Динамическое управление

Кеширование

Базовое кеширование

Автогенерация ключей

Теги кеша

Выбор драйвера кеша

Условное кеширование

Управление кешем

Мемоизация в памяти

Мемоизация позволяет сохранять результаты выполнения Action в памяти PHP на время текущего запроса. Это помогает избежать повторного выполнения одинаковых действий, запросов к БД или внешним API в рамках одного запроса.

Отличие от кеширования

Базовое использование

Принудительное обновление

События и мемоизация

По умолчанию, когда результат берётся из памяти (мемоизирован), события НЕ запускаются повторно. Это связано с производительностью и рализовано в качестве оптимизации.

Если все-таки по какой-то причине необходимо запускать события даже для мемоизированных результатов, используйте аргумент forceEvents:

Небольшие рекомендации:

Когда использовать forceEvents:

Когда НЕ использовать forceEvents:

Пользовательский ключ мемоизации

По умолчанию ключ генерируется на основе аргументов. Однако можно задать свой ключ:

Управление мемоизацией (для сложных сценариев)

Практические примеры

Избежать N+1 проблемы в UseCase:

Использование между слоями приложения:

Кеширование внешних API запросов:

Комбинирование с кешированием:

Когда использовать мемоизацию

Используйте memo() когда:

Не используйте memo() когда:

Производительность

Мемоизация добавляет минимальный overhead, однако облегчает рутинные действия и избавляет от дублирования запросов к БД/Кешу. Расценивайте это как своего рода цену за удобство. Пример:

Комплексное использование

Все возможности можно комбинировать:

Лучшие практики

1. Один Action - одно действие, UseCase - сценарий

2. Используйте абстракции для взаимозаменяемых Actions (DIP)

3. Используйте типизацию

3. UseCase для агрегирования Actions

UseCase - это тот же Action, но предназначенный для координации множества других Actions в единый сценарий:

Преимущества UseCase:

Dependency Inversion Principle (SOLID)

Actions загружаются через Laravel Service Container (app(static::class)), что позволяет применять принцип инверсии зависимостей:

Подход 1: Подмена через абстрактные классы

Подход 2: Подмена конкретного класса

Подход 3: Регистрация по строковым ключам (менее предпочтительный, но возможный способ)

Внедрение зависимостей через конструктор

Глобальная подмена для тестирования

Условная подмена

Преимущества DIP в Actions

Почему не интерфейсы?

Важно: Нельзя использовать интерфейсы с конкретной сигнатурой run(), так как базовый контракт Action уже определяет run(...$args): mixed с variadic параметрами. Любой другой интерфейс с конкретной сигнатурой будет несовместим.

Решение: Используйте абстрактные классы или подменяйте конкретные классы через контейнер.

Хелперы

Пакет предоставляет удобные хелперы:

action() - Быстрое выполнение Action

usecase() - Быстрое выполнение UseCase

action_with() - Action с конфигурацией

Позволяет сконфигурировать Action перед выполнением через callback:

usecase_with() - UseCase с конфигурацией

Позволяет сконфигурировать UseCase перед выполнением через callback:

generate_args_hash() - Генерация хеша аргументов

Функция для генерации MD5 хеша из массива аргументов. Используется внутри пакета для мемоизации и кеширования, но доступна и для внешнего использования:

Почему она появилась?:

Использование в контроллерах

Хелперы особенно удобны в контроллерах и сервисах:

4. Кешируйте тяжелые операции

Лицензия

GPL-2.0-only

Автор

Vladimir Pyankov (aka LeMaX10)


All versions of simple-actions with dependencies

PHP Build Version
Package Version
Requires php Version >=8.2
laravel/framework Version >=8.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package lemax10/simple-actions contains the following files

Loading the files please wait ...