framework-tools-bundle
Tools
Open Source
PHP
WordPress
Различные дополнительные инструменты для кастомных вариантов Symfony
Установка
- composer.json:
"repositories": [ { "type": "git", "url": "https://github.com/proklung/framework-tools-bundle" } ]
-
composer require proklung/framework-tools-bundle
Детали
Delayed event dispatcher
Основа
Из особо интересного: “Flushing delayed events with a custom flusher”.
Если запускается из под Битрикс, то подвязывается слушатель на событие OnEpilog
.
Если запускается из под WordPress, то подвязывается слушатель на хук shutdown
.
Command runner
Форк пакета. Запуск команд пакетом в разных процессах.
Пример использования
(new CommandRunner([ new Process("my:command -q"), new Process("my:command2 -q"), new Process("my:command3 -q"). new Process("my:command4 -q"), new Process("my:command5 -q"), new Process("my:command6 -q --env=$env"), ])) ->continueOnError(true) ->setIO($this->io) ->setLimit(3) ->run();
Как-то так:
class ExampleRunner extends Command { /** @var SymfonyStyle */ protected $io; /** * @inheritDoc */ protected function configure() { $this->setName('runner:example') ->setDescription('runner example'); } /** * @inheritDoc */ protected function execute(InputInterface $input, OutputInterface $output): int { $this->io = new SymfonyStyle($input, $output); $this->io->writeln('Running runner example'); sleep(5); # Sleep so user can abort update (new CommandRunner([ new Process(['cache:clear', 'cache:clear --cache-type menu']), ])) ->continueOnError(true) ->setIO($this->io) ->setLimit(3) ->run(); return 0; } }
Lockable консольные команды
Команды, запускающиеся одновременно только в одном экземпляре.
use ProklFrameworkExtensionBundleServicesCommandLockableAbstractLockableCommand; class SomeCommand extends AbstractLockableCommand { protected function configure() { $this->setName('lock:command') ->setDescription('Lock command') ; parent::configure(); } protected function execute(InputInterface $input, OutputInterface $output) : int { $output->writeln('Start'); sleep(100); $output->writeln('End'); return 0; } }
Можно отнаследовать метод getLockTtl()
, чтобы переопределить время блокировки (по умолчанию – 60 секунд).
Зависимости такого сорта команд подцепляются через сеттеры посредством механизма autowiring.
Консольные команды
Очистка кэша (Битрикс и WordPress)
php bin/console cache:clear
Простой битриксовый PSR-16 кэш
bitrix.simple.cacher.configured: class: ProklFrameworkExtensionBundleServicesBitrixPsr16CacheBitrixCacher arguments: ['@BitrixMainDataCache'] calls: - setBaseDir: ['/guzzle_request'] - setTtl: [3600]
Методы:
- get
- getMultiple
- has
- delete
- deleteMultiple
- clear
- setMultiple
-
set –
set($key, $value, $ttl = null)
-
getOrSet –
getOrSet(string $key, callable $callable, $ttl = null)
Кастомные валидаторы для Symfony Validator
-
Email – при помощи
EguliasEmailValidator
-
Phone – при помощи
giggsey/libphonenumber-for-php
Вспомогательное для контроллеров
-
BinaryFileResponseTrait
– методreturnFile(string $file)
отдаст в браузер BinaryFileResponse файл $file,
автоматом определив contentType.
Отправка информации о фатальных ошибках через Symfony Notifier для WordPress
-
Должна быть определена переменная среды
ADMIN_EMAIL
-
Должен быть установлен пакет
symfony/notifier
и бандл.
Если нет, то соответствующие сервисы удаляются из контейнера при компиляции. -
В корневом проекте должен быть класс-сервис, реализующий
ProklFrameworkExtensionBundleServicesWordpressErrorHandlerContractErrorDbOperatorInterface
для работы с записями в БД (в моем случае сохраняется md5 от сериализованного…