Documentation
Интеграции
Laravel
Laravel
composer require codex-team/hawk.laravel
- PHP 7.2+
- Laravel 11.x+
- автоматический перехват ошибок;
- ручная отправка исключений и сообщений;
- добавление данных пользователя;
- добавление дополнительного контекста;
- фильтрация чувствительных данных;
-
хук
для обработки событий перед отправкой;BeforeSend - сбор breadcrumbs: маршруты, запросы к БД, очереди, логи;
- поддержка Laravel 11+.
Обновите файл :
bootstrap/app.php
<?php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware) {
//
})
->withExceptions(function (Exceptions $exceptions) {
HawkBundle\Integration::handles($exceptions);
})
->create();
Добавьте Hawk service provider в или config/app.phpbootstrap/providers.php:
'providers' => [
// Другие service providers...
HawkBundle\ErrorLoggerServiceProvider::class,
],
Выполните команду:
php artisan hawkbundle:publish
Будет создан файл .
config/hawk.php
После этого добавьте токен в :
.env
HAWK_TOKEN=<your_integration_token>
Добавление данных пользователя и контекста
app(\HawkBundle\Catcher::class)->setUser([
'name' => 'John Doe',
'photo' => 'https://example.com/avatar.png',
]);
app(\HawkBundle\Catcher::class)->setContext([
'page' => 'checkout',
'cart_id' => 123,
]);
Внедрите через dependency injection и вызовите \HawkBundle\Catcher:
sendException()
use HawkBundle\Catcher;
class TestController extends Controller
{
private Catcher $catcher;
public function __construct(Catcher $catcher)
{
$this->catcher = $catcher;
}
public function test()
{
try {
// Код, который может завершиться ошибкой
} catch (\Exception $e) {
$this->catcher->sendException($e);
}
}
}
Отправка пользовательских сообщений
app(\HawkBundle\Catcher::class)->sendMessage(
'Checkout started',
[
'cart_id' => 123,
'step' => 'payment',
]
);
Если вы хотите изменить или отфильтровать данные ошибки перед отправкой в Hawk, реализуйте .
BeforeSendServiceInterface
<?php
namespace App\Hawk;
use Hawk\EventPayload;
use HawkBundle\Services\BeforeSendServiceInterface;
class BeforeSendService implements BeforeSendServiceInterface
{
public function __invoke(EventPayload $eventPayload): ?EventPayload
{
$user = $eventPayload->getUser();
// Удаление чувствительных данных
if (!empty($user['email'])) {
unset($user['email']);
$eventPayload->setUser($user);
}
// Пропуск отправки в отдельных случаях
if ($eventPayload->getContext()['skip_sending'] ?? false) {
return null;
}
return $eventPayload;
}
}
Зарегистрируйте сервис в :
config/hawk.php
return [
'integration_token' => env('HAWK_TOKEN'),
'before_send_service' => \App\Hawk\BeforeSendService::class,
];
- Нашли баг — создайте issue.
- Хотите улучшить пакет — pull request приветствуются.