Table of contents

Symfony

Кэтчер поддерживает PHP 7.2 и выше.

composer require codex-team/hawk.symfony

Добавьте данные для авторизации в файл .env:

HAWK_TOKEN=<your_token_from_the_control_panel>

Создайте файл конфигурации config/packages/hawk.yaml со следующим содержимым:

hawk: integration_token: '%env(HAWK_TOKEN)%' # Необязательно: сервис для обработки события перед отправкой before_send_service: 'App\Hawk\BeforeSendService'

В файле config/packages/monolog.yaml укажите настройки handler в нужной секции, например dev или prod:

hawk: type: service id: HawkBundle\Monolog\Handler level: error

Вы можете передать данные пользователя и дополнительный контекст:

$this->catcher->setUser([ 'name' => 'user name', 'photo' => 'user photo', ]); $this->catcher->setContext([ // Additional context information ]);

Чтобы вручную отправлять исключения, внедрите \HawkBundle\Catcher через dependency injection и вызовите sendException():

$this->catcher->sendException($exception);

Вы также можете отправлять произвольные сообщения через метод sendMessage(...):

$this->catcher->sendMessage( 'your message', [ // Additional context information ] );
private $catcher; public function __construct(\HawkBundle\Catcher $catcher) { $this->catcher = $catcher; } public function test() { try { // Код, в котором нужно перехватить ошибку } catch (\Exception $exception) { $this->catcher->sendException($exception); } }

Если вы хотите обработать или изменить данные ошибки перед отправкой в Hawk, можно определить собственный сервис, реализующий BeforeSendServiceInterface.

<?php namespace App\Hawk; use Hawk\EventPayload; use HawkBundle\Service\BeforeSendServiceInterface; class BeforeSendService implements BeforeSendServiceInterface { public function __invoke(EventPayload $eventPayload): ?EventPayload { $user = $eventPayload->getUser(); // Изменение или добавление данных в событие if (!empty($user['email'])) { unset($user['email']); $eventPayload->setUser($user); } // Верните null, чтобы не отправлять событие в Hawk if ($eventPayload->getContext()['skip_sending'] ?? false) { return null; } return $eventPayload; } }

Если у вас есть вопросы или предложения по улучшению, создайте issue или pull request в репозитории проекта.