ale10257/error-message-yii2
最新稳定版本:0.0.5
Composer 安装命令:
composer require ale10257/error-message-yii2
包简介
Yii2 component for sending error messages via pluggable messenger (email, Slack, etc.)
README 文档
README
Yii2-компонент для отправки сообщений об ошибках в фоне через queue:
- в бот (любой клиент с интерфейсом
IErrorBot); - на email через стандартный
Yii::$app->mailer.
Требования
- PHP 7.4+
- В приложении при старте должна загружаться переменные окружения из
.env(например черезvlucas/phpdotenv). Компонент ожидает, что конфиг уже использует$_ENVдля токенов и chat id.
Установка
composer require ale10257/error-message-yii2
Подключение в конфиге
1. Компонент sendErrorMessage
В конфиг приложения (например config/web.php или config/common.php) добавьте компонент:
'components' => [ 'queue' => [ 'class' => \yii\queue\file\Queue::class, 'path' => '@runtime/queue', ], 'sendErrorMessage' => [ 'class' => \ale10257\sendError\ErrorMsgComponent::class, 'queueComponentId' => 'queue', 'enableBotError' => (int)($_ENV['ENABLE_BOT_ERROR']) === 1, 'enableEmailError' => (int)($_ENV['ENABLE_EMAIL_ERROR']) === 1, 'emailRecipients' => [ (string)$_ENV['ADMIN_EMAIL'], (string)$_ENV['PROCTOLEHA_EMAIL'], ], 'client' => [ 'class' => \YourNamespace\YourMessenger::class, // реализация IErrorBot 'apiKey' => $_ENV['YOUR_MESSENGER_API_KEY'], 'chatId' => $_ENV['YOUR_MESSENGER_CHAT_ID'], ], 'useQueue' => true, 'errorCodeMap' => [ \yii\web\NotFoundHttpException::class => 404, \yii\web\ForbiddenHttpException::class => 403, ], ], ],
- client — объект, реализующий
\ale10257\sendError\IErrorBot(методsendErrorMsg(string $message): void). - useQueue — если
true, отправка сообщений выполняется черезYii::$app->queueи не блокирует веб-запрос. - queueComponentId — id компонента очереди (по умолчанию
queue). - enableBotError — включает/выключает отправку в бот.
- enableEmailError — включает/выключает отправку email.
- emailRecipients — список email-получателей сообщений об ошибках.
- errorCodeMap — соответствие «класс исключения → HTTP-код». Исключения с кодами из этого маппинга (404, 403 и т.д.) в мессенджер не отправляются; отправляются только «неизвестные» (например 500).
Запуск воркера очереди
После включения useQueue нужен запущенный воркер:
php yii queue/listen --verbose=1
Переменные окружения
ENABLE_BOT_ERROR=1 ENABLE_EMAIL_ERROR=1 ADMIN_EMAIL=admin@example.com PROCTOLEHA_EMAIL=proctoleha@example.com SMTP_USERNAME=robot@example.com
SMTP_USERNAME используется как from при отправке email.
Тема письма по умолчанию: Application Error Alert.
2. Обработчик исключений приложения
Чтобы необработанные исключения уходили в мессенджер, подключите ErrorHandler пакета:
// config/web.php 'components' => [ 'errorHandler' => [ 'class' => \ale10257\sendError\ErrorHandler::class, ], // ... ],
Примеры использования
Отправка произвольного текста
\Yii::$app->sendErrorMessage->send('Критическая ошибка: сервис недоступен');
Логирование с отправкой в мессенджер
Класс LogError пишет в лог и при необходимости отправляет сообщение через компонент:
use ale10257\sendError\LogError; try { // ... } catch (\Throwable $e) { LogError::error('Ошибка при обработке заказа', $e, false); }
В dev-окружении (YII_ENV === 'dev') исключение можно пробрасывать дальше: третий параметр true — тогда в dev будет выброшен exception, а не только лог и мессенджер.
Какую точку входа использовать
- Необработанное исключение: ничего вручную не вызывайте — если в конфиге подключён
\\ale10257\\sendError\\ErrorHandler, он сам перехватит исключение и отправит сообщение. - “Мягкая” ошибка (исключение поймали и обработали): используйте
LogError::error(...), потому что глобальныйErrorHandlerв этом случае не сработает.
Интерфейс бота
Любая реализация должна реализовать \ale10257\sendError\IErrorBot:
namespace YourNamespace; use ale10257\sendError\IErrorBot; class YourMessenger implements IErrorBot { private string $apiKey; private string $chatId; public function __construct(string $apiKey, string $chatId) { $this->apiKey = $apiKey; $this->chatId = $chatId; } public function sendErrorMsg(string $message): void { // POST в API your-messenger (или другой сервис) } }
В конфиге такой класс подставляется в sendErrorMessage.client.
统计信息
- 总下载量: 23
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 2
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-02-19