- composer.json:
"repositories": [
{
"type": "git",
"url": "https://github.com/proklung/framework-tools-bundle"
}
]
composer require proklung/framework-tools-bundle
Из особо интересного: "Flushing delayed events with a custom flusher".
Если запускается из под Битрикс, то подвязывается слушатель на событие OnEpilog
.
Если запускается из под Wordpress, то подвязывается слушатель на хук shutdown
.
Форк пакета. Запуск команд пакетом в разных процессах.
(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;
}
}
Команды, запускающиеся одновременно только в одном экземпляре.
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.
php bin/console cache:clear
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)
- Email - при помощи
Egulias\EmailValidator
- Phone - при помощи
giggsey/libphonenumber-for-php
BinaryFileResponseTrait
- методreturnFile(string $file)
отдаст в браузер BinaryFileResponse файл $file, автоматом определив contentType.
-
Должна быть определена переменная среды
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.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();
Лог запросов упадет в обычный лог Монолога.