proklung / bitrix-tools-pack-bundle
Ordinary tools pack for Symfony+Bitrix.
Installs: 2
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 1
Forks: 0
Open Issues: 0
Type:symfony-bundle
Requires
- php: >=7.3 | 8.0
- intervention/image: ^2.5
- league/html-to-markdown: ^5.0
- monolog/monolog: ~1 || ~2
- symfony/config: 4.4 || ^5.0
- symfony/console: 4.4 || ^5.0
- symfony/dependency-injection: ^4.4 || ^5.0
- symfony/http-kernel: 4.4 || ^5.0
Requires (Dev)
- dev-master
- 1.8.2
- 1.8.1
- 1.8.0
- 1.7.0
- 1.6.9
- 1.6.8
- 1.6.7
- 1.6.6
- 1.6.5
- 1.6.4
- 1.6.3
- 1.6.2
- 1.6.1
- 1.6.0
- 1.5.9
- 1.5.8
- 1.5.7
- 1.5.6
- 1.5.5
- 1.5.4
- 1.5.3
- 1.5.2
- 1.5.1
- 1.5.0
- 1.4.5
- 1.4.4
- 1.4.3
- 1.4.2
- 1.4.1
- 1.4.0
- 1.3.0
- 1.2.9
- 1.2.8
- 1.2.7
- 1.2.6
- 1.2.5
- 1.2.4
- 1.2.3
- 1.2.1
- 1.2.0
- 1.1.9
- 1.1.8
- 1.1.7
- 1.1.6
- 1.1.5
- 1.1.4
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.9
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
This package is auto-updated.
Last update: 2024-10-28 13:45:51 UTC
README
Цель: борьба с копипастой всякой мелочи между проектами. Содержит в основном мусорный legacy код, доставшийся в наследство от предыдущих поколений, но прижившийся.
INTERNAL
##Установка
composer.json:
"repositories": [ { "type": "git", "url": "https://github.com/proklung/bitrix-tools-pack-bundle" } ]
composer require proklung/bitrix-tools-pack-bundle
Фасады
Prokl\BitrixOrdinaryToolsBundle\Services\Facades\Container
- Экземпляр сервис-контейнераProkl\BitrixOrdinaryToolsBundle\Services\Facades\Application
- $APPLICATIONProkl\BitrixOrdinaryToolsBundle\Services\Facades\ApplicationD7
-Bitrix\Main\Application
Prokl\BitrixOrdinaryToolsBundle\Services\Facades\CMain
-CMain
Prokl\BitrixOrdinaryToolsBundle\Services\Facades\CUser
-CUser
Prokl\BitrixOrdinaryToolsBundle\Services\Facades\CUser
-CFile
Prokl\BitrixOrdinaryToolsBundle\Services\Facades\EventManager
-Bitrix\Main\EventManager
Prokl\BitrixOrdinaryToolsBundle\Services\Facades\EventMail
-Bitrix\Main\Mail\Event
Логгеры
Prokl\BitrixOrdinaryToolsBundle\Services\Logger\EventLogLogger
- monolog-логгер для записи логов в журнал событий /bitrix/admin/event_log.php?lang=ru.
Конфигурация Monolog Bundle:
monolog: handlers: myHandler: type: service id: Prokl\BitrixOrdinaryToolsBundle\Services\Logger\EventLogLogger level: error
Использование:
use Monolog\Logger; /** @var Logger $logger */ $logger = container()->get('public_logger'); $logger->error( 'Testing', ['context' => 'OK', 'MODULE_ID' => 'My module', 'ITEM_ID' => get_class($this)] );
Использование битриксовых почтовых событий и их шаблонов
use Prokl\BitrixOrdinaryToolsBundle\Services\Email\EventBridge\Sender\BitrixMailEventSender; /** @var BitrixMailEventSender $bitrixEventHandler */ $bitrixEventHandler = container()->get('notifier_bitrix_event_sender.mail'); // Массив, идентичный с параметром fields при отправке Битриксом сообщений // См. https://dev.1c-bitrix.ru/api_help/main/reference/cevent/send.php $arFields = ['NAME' => 'testing email', 'EMAIL' => 'recipitient@gmail.com']; // Будет оправлено сообщение в канал email и сделана запись в таблице b_event. $bitrixEventHandler->send('CODE_MAIL_EVENT', $arFields);
Ошибки отправки не глушатся. Если что-то пойдет не так, то выбросится исключение.
Отправка битриксового события согласно channel_policy
При условии channel_policy
в конфиге framework.yaml
:
'channel_policy': medium: ['email', 'chat/telegram'],
use Prokl\BitrixOrdinaryToolsBundle\Services\Email\EventBridge\Sender\BitrixPolicySender; use Symfony\Component\Notifier\Notification\Notification;; /** @var BitrixPolicySender $bitrixEventHandler */ $bitrixEventHandler = container()->get('notifier_bitrix_event_sender.policy'); // Массив, идентичный с параметром fields при отправке Битриксом сообщений // См. https://dev.1c-bitrix.ru/api_help/main/reference/cevent/send.php $arFields = ['NAME' => 'testing email', 'EMAIL' => 'recipitient@gmail.com']; // Будет оправлено сообщение в канал email и сделана запись в таблице b_event. $bitrixEventHandler->send('CODE_MAIL_EVENT', $arFields, Notification::IMPORTANCE_MEDIUM);
Использование битриксовых SMS событий и их шаблонов
use Prokl\BitrixOrdinaryToolsBundle\Services\Email\EventBridge\Sender\BitrixSmsSender; /** @var BitrixSmsSender $bitrixEventHandler */ $bitrixEventHandler = container()->get('notifier_bitrix_event_sender.sms'); // Массив, идентичный с параметром fields при отправке Битриксом сообщений $arFields = [ 'SENDER' => 'test', 'RECEIVER' => '+7926111111', 'USER_PHONE' => '+7926111111', 'CODE' => '123' ]; // Будет оправлено SMS и сделана запись в таблице b_event. $bitrixEventHandler->send('SMS_USER_RESTORE_PASSWORD', $arFields);
Ошибки отправки глушатся. Если что-то с доставкой SMS пойдет не так, то будет тихо, но в таблице b_event
появится запись с признаком неудачи и текстом ошибки.
Отправка битриксовых почтовых шаблонов в Телеграм
use Prokl\BitrixOrdinaryToolsBundle\Services\Email\EventBridge\Sender\BitrixTelegramEventSender; /** @var BitrixTelegramEventSender $bitrixEventHandler */ $bitrixEventHandler = container()->get('notifier_bitrix_event_sender.telegram'); $arFields = ['CODE' => '2222', 'LINK' => 'http://site.loc/']; $bitrixEventHandler->send('TEST_EVENT', $arFields);
Должен быть установлен symfony/telegram-notifier
и зарегистрирован транспорт telegram
.
Нюанс:
- Telegram плохо переваривает html (даже в режиме
parse_mode = html
). Посему под капотом html шаблона превращается в markdown разметку.
Отправка сообщений о фатальных ошибках на проекте согласно channel-policy нотификатора
Symfony Notifier должен быть сконфигурирован в framework.yaml
.
/bitrix/.settings.php
:
Работает при условии установки бандла.
use Symfony\Component\Notifier\Notification\Notification; return [ 'exception_handling' => array( 'value' => array( 'debug' => env('DEBUG', false), 'handled_errors_types' => 4437, 'exception_errors_types' => 4437, 'ignore_silence' => false, 'assertion_throws_exception' => true, 'assertion_error_type' => 256, 'log' => array ( 'class_name' => \Prokl\BitrixOrdinaryToolsBundle\Services\ErrorHandler\ErrorHandler::class, 'required_file' => 'vendor/proklung/bitrix-tools-pack-bundle/Services/ErrorHandler/ErrorHandler/ErrorHandler.php', 'settings' => array ( 'types' => [ \Bitrix\Main\Diag\ExceptionHandlerLog::UNCAUGHT_EXCEPTION, \Bitrix\Main\Diag\ExceptionHandlerLog::IGNORED_ERROR, \Bitrix\Main\Diag\ExceptionHandlerLog::FATAL, ], // Получатель почты; перебивает параметры родительского модуля 'recipient' => 'email@gmail.com', // Или какой-нибудь иной способ различения dev/prod среды // По умолчанию - dev 'env' => env('DEBUG', false) ? 'dev' : 'prod', // В каком окружении работать. По умолчанию - prod. 'allowed_env' => ['dev', 'prod'], // Уровень важности согласно channel_policy (см. документацию к модулю proklung.notifier) // По умолчанию - urgent 'importancy' => Notification::IMPORTANCE_URGENT, ), ), ), 'readonly' => false, ), ];
Нюансы
- Сообщение об ошибке рассылается всего один раз (иначе чревато флудом). Каждые сутки таблица с информацией об отправленных уведомлениях очищается посредством агента. Процесс начинается по новой.
Транспорт для Symfony Messenger посредством Битрикс D7
Форкнуто из модуля.
framework.yaml
:
messenger: enabled: true transports: async: "%env(MESSENGER_TRANSPORT_DSN)%" bitrix: 'bitrix://default?queue_name=messages' routing: 'Local\Services\Messanger\SmsNotification': bitrix
Consume:
php bin/console messenger:consume bitrix
Прогреватели кэша
Для команды php bin/console cache:warmup
-
RouterCacheWarm - прогрев кэша роутера (если таковой присутствует).
-
BitrixCacheWarmer - прогрев кэша статических страниц по списку.
Список определяется переменной контейнера warming_pages
в корневом проекте:
parameters: warming_pages: - '/' - '/news/'
Если такой переменной нет, то прогревается только главная (/
) страница.
Консольные команды
- Проверка - отправляется электронная почта или нет
php bin/console bitrix:check-send-email