У меня есть служба, которая перехватывает события Sentry. Я использую функцию beforeSend.
Я бы загрузил файл json, содержащий данные, которые нужно очистить или сохранить. Это служба, и я создаю свой конструктор аналогично другим, но контекст «$ this» не существует, когда я нахожусь в отладчике в этой функции.
Ядро находится в глобальных переменных, но я думаю, что это не очень хорошая идея ... Я бы только получил каталог root и все, но я не нашел, как это сделать в этот класс ... Конструктор кажется бесполезным.
Кто-нибудь может мне помочь с подобным опытом?
РЕДАКТИРОВАТЬ:
Сервис:
namespace App\Services;
use Sentry\Event;
use Symfony\Component\HttpKernel\KernelInterface;
class SentryBeforeSendService
{
private static $rootDir;
public function __construct(KernelInterface $kernel)
{
self::$rootDir = $kernel->getRootDir();
}
/**
* Scrubs the value of all TARGET_PARAMETERS
* in the event's request.
*
* @param Event $event
*
* @return Event
*/
public function beforeSend(Event $event)
{
$rootDir = self::$rootDir;
$event->setRequest(self::scrubRequest($event->getRequest(), $rootDir));
try {
$composerData = json_decode(file_get_contents($rootDir.'/../composer.json'), true);
$version = $composerData['version'];
$event->setRelease($version);
} catch (\Exception $e) {
//do nothing
}
return $event;
}
/**
* Scrubs GET and POST parameters
*
* @param array $request
*
* @return array
*/
private static function scrubRequest(array $request, $rootDir)
{
// DO SOMETHING WITH $rootDir to scrub data with external file
}}
services.yml:
app.service.sentry_before_send:
class: 'App\Services\SentryBeforeSendService'
arguments: ['@kernel']
config_prod.yml :
sentry:
dsn: "%sentry_dsn%"
options:
environment: "%sentry_environment%"
# release: '%env(VERSION)%' #overridden from composer.json version in SentryBeforeSendService::beforeSend
before_send: 'App\Services\SentryBeforeSendService::beforeSend'
Но, похоже, конструкции никогда не было.
Большое спасибо.