proklung / framework-tools-bundle
Misc tools for custom Symfony.
Installs: 2
Dependents: 1
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 0
Type:symfony-bundle
Requires
- php: >=7.3 || ^8.0
- ext-json: *
- denismitr/translit: ~3
- doctrine/common: ^3.1
- egulias/email-validator: ^2 | ^3.1
- giggsey/libphonenumber-for-php: ^8.12
- psr/simple-cache: ^1.0
- symfony/config: ^4.4 || ^5.0
- symfony/console: ^4.4 || ^5.0
- symfony/dependency-injection: ^4.4 || ^5.0
- symfony/filesystem: ^4.4 || ^5.0
- symfony/http-kernel: ^4.4 || ^5.0
- symfony/lock: ^4.4 || ^5.0
- symfony/mime: ^4.4 || ^5.0
- symfony/process: ^4.4 || ^5.0
- symfony/validator: ^4.4 || ^5.0
Requires (Dev)
- brain/monkey: ^2.4.2
- icanhazstring/composer-unused: ^0.7.5
- johnpbloch/wordpress-core: @stable
- proklung/phpunit-testing-tools: ^1.3.0
This package is auto-updated.
Last update: 2024-11-24 21:34:59 UTC
README
Установка
- 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 Prokl\FrameworkExtensionBundle\Services\Command\Lockable\AbstractLockableCommand; 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: Prokl\FrameworkExtensionBundle\Services\Bitrix\Psr16Cache\BitrixCacher arguments: ['@Bitrix\Main\Data\Cache'] 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 - при помощи
Egulias\EmailValidator
- Phone - при помощи
giggsey/libphonenumber-for-php
Вспомогательное для контроллеров
BinaryFileResponseTrait
- методreturnFile(string $file)
отдаст в браузер BinaryFileResponse файл $file, автоматом определив contentType.
Отправка информации о фатальных ошибках через Symfony Notifier для Wordpress
-
Должна быть определена переменная среды
ADMIN_EMAIL
-
Должен быть установлен пакет
symfony/notifier
и бандл. Если нет, то соответствующие сервисы удаляются из контейнера при компиляции. -
В корневом проекте должен быть класс-сервис, реализующий
Prokl\FrameworkExtensionBundle\Services\Wordpress\ErrorHandler\Contract\ErrorDbOperatorInterface
для работы с записями в БД (в моем случае сохраняется md5 от сериализованного исключения). -
save
- сохранить сведения об ошибке в базу (или куда там еще). -
has
- есть ли запись об этой ошибке в базе или нет. -
clearTable
- очистить таблицу с данными об ошибках. -
По умолчанию сообщения засылаются в каналы, отмеченные как
urgent
. -
Декорированный логгер.
Конфиг основного проекта:
logger_notify_decorated: class: Prokl\FrameworkExtensionBundle\Services\Wordpress\Notifier\LoggerDecorator decorates: 'logger' arguments: ['@.inner', '@wp_notificator']
Логгирование SQL запросов для Wordpress посредством Monolog
Сервис sql.logger.monolog
. Если в контейнере нет сервисов wpdb
(экземпляр wpdb) и logger
- логгер удаляется.
В wp-config.php
:
define('SAVEQUERIES', true);
Но я сделал так (SAVEQUERIES
в .env
=> 0 или 1):
define('SAVEQUERIES', (bool)$_ENV['SAVEQUERIES'] ?? false);
Где-нибудь:
$sql = container()->get('sql.logger.monolog'); $sql->init();
Лог запросов упадет в обычный лог Монолога.