proklung / bitrix-tools-pack-bundle
适用于 Symfony+Bitrix 的普通工具包。
1.8.2
2021-08-28 06:36 UTC
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-09-28 13:35:37 UTC
README
目标:对抗项目间各种小事情的复制粘贴。主要包含从上一代继承下来的垃圾遗留代码,但已经适应了。
内部
##安装
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)] );
使用 Bitrix 邮件事件及其模板
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 发送 Bitrix 事件
如果配置了 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);
使用 Bitrix 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
表中记录失败标志和错误文本,但不会抛出异常。
将 Bitrix 邮件模板发送到 Telegram
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 格式。
根据通道策略通知器发送项目上的致命错误消息
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, ), ];
细节
- 错误消息只会发送一次(否则可能导致垃圾邮件)。每天通过代理清除发送通知信息的表格,过程重新开始。
通过 Bitrix D7 的 Symfony Messenger 传输
从 模块 分支。
framework.yaml
:
messenger: enabled: true transports: async: "%env(MESSENGER_TRANSPORT_DSN)%" bitrix: 'bitrix://default?queue_name=messages' routing: 'Local\Services\Messanger\SmsNotification': bitrix
消费
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