https://github.com/proklung/framework-tools-bundle
Различные дополнительные инструменты для кастомных вариантов Symfony
https://github.com/proklung/framework-tools-bundle
bitrix bitrix-symfony php7 symfony-bundle wordpress wordpress-symfony
Last synced: 2 months ago
JSON representation
Различные дополнительные инструменты для кастомных вариантов Symfony
- Host: GitHub
- URL: https://github.com/proklung/framework-tools-bundle
- Owner: ProklUng
- License: mit
- Created: 2021-05-08T06:57:48.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2021-08-24T14:29:10.000Z (over 3 years ago)
- Last Synced: 2024-12-25T21:24:23.737Z (4 months ago)
- Topics: bitrix, bitrix-symfony, php7, symfony-bundle, wordpress, wordpress-symfony
- Language: PHP
- Homepage:
- Size: 111 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.MD
- License: LICENSE
Awesome Lists containing this project
README
# Различные дополнительные инструменты для кастомных вариантов Symfony
## Установка
1) composer.json:
```json
"repositories": [
{
"type": "git",
"url": "https://github.com/proklung/framework-tools-bundle"
}
]
```2) `composer require proklung/framework-tools-bundle`
## Детали
### Delayed event dispatcher
[Основа](https://github.com/olvlvl/delayed-event-dispatcher/blob/master/README.md)
Из особо интересного: "Flushing delayed events with a custom flusher".
Если запускается из под Битрикс, то подвязывается слушатель на событие `OnEpilog`.
Если запускается из под Wordpress, то подвязывается слушатель на хук `shutdown`.
### Command runner
Форк [пакета](https://github.com/Fichtme/symfony-command-runner). Запуск команд пакетом в разных процессах.
#### Пример использования
```php
(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();
```Как-то так:
```php
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 консольные команды
Команды, запускающиеся одновременно только в одном экземпляре.
```php
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)
```bash
php bin/console cache:clear
```### Простой битриксовый PSR-16 кэш
```yaml
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` и [бандл](https://github.com/ProklUng/core.framework.extension.bundle).
Если нет, то соответствующие сервисы удаляются из контейнера при компиляции.
- В корневом проекте должен быть класс-сервис, реализующий `Prokl\FrameworkExtensionBundle\Services\Wordpress\ErrorHandler\Contract\ErrorDbOperatorInterface`
для работы с записями в БД (в моем случае сохраняется md5 от сериализованного исключения).
- `save` - сохранить сведения об ошибке в базу (или куда там еще).
- `has` - есть ли запись об этой ошибке в базе или нет.
- `clearTable` - очистить таблицу с данными об ошибках.
- По умолчанию сообщения засылаются в каналы, отмеченные как `urgent`.- Декорированный логгер.
Конфиг основного проекта:
```yaml
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`:
```php
define('SAVEQUERIES', true);
```Но я сделал так (`SAVEQUERIES` в `.env` => 0 или 1):
```php
define('SAVEQUERIES', (bool)$_ENV['SAVEQUERIES'] ?? false);
```Где-нибудь:
```php
$sql = container()->get('sql.logger.monolog');
$sql->init();
```Лог запросов упадет в обычный лог Монолога.