SDK PHP (Laravel + Symfony)
This content is not available in your language yet.
Le SDK Pionne pour PHP. Trois usages : standalone, Laravel (auto-detect via service provider), Symfony (event subscriber).
Installation
Section intitulée « Installation »composer require pionne/pionneAuto-context
Section intitulée « Auto-context »PHP_VERSION— version PHPphp_uname()— OS, hostname- URL de la requête, méthode HTTP, route name
- User ID si auth (Laravel
Auth::user(), SymfonySecurity::getUser())
Auto-breadcrumbs
Section intitulée « Auto-breadcrumbs »- Queries DB (Laravel : via
DB::listen(), Symfony : via Doctrine middleware) - Requêtes HTTP sortantes (middleware Guzzle automatique)
- Logs
Log::info()/error_log()
Frameworks
Section intitulée « Frameworks »Le service provider est auto-discover. Configure via env vars :
PIONNE_TOKEN=pio_live_…PIONNE_ENVIRONMENT=productionPIONNE_RELEASE=1.0.0Et dans config/services.php :
'pionne' => [ 'token' => env('PIONNE_TOKEN'), 'environment' => env('PIONNE_ENVIRONMENT', 'production'), 'release' => env('PIONNE_RELEASE'), 'sample_rate' => 1.0, 'scrub_pii' => true,],Pour Laravel 11+, hook dans bootstrap/app.php :
use Pionne\Laravel\PionneHandler;
return Application::configure(basePath: dirname(__DIR__)) ->withExceptions(function (Exceptions $exceptions) { $exceptions->report(function (Throwable $e) { PionneHandler::report($e); }); })->create();Pour Laravel 10 et avant, dans App\Exceptions\Handler :
use Pionne\Pionne;
public function report(Throwable $e): void{ Pionne::captureException($e); parent::report($e);}Les jobs de queue sont auto-instrumentés — toute exception non gérée dans un Job est capturée.
Active le bundle dans config/bundles.php :
return [ // ... Pionne\Symfony\PionneBundle::class => ['all' => true],];Configure dans config/packages/pionne.yaml :
pionne: token: '%env(PIONNE_TOKEN)%' environment: '%env(PIONNE_ENVIRONMENT)%' release: '%env(PIONNE_RELEASE)%' sample_rate: 1.0 scrub_pii: trueEt dans .env :
PIONNE_TOKEN=pio_live_…PIONNE_ENVIRONMENT=productionPIONNE_RELEASE=1.0.0Le bundle enregistre automatiquement un EventSubscriber sur KernelEvents::EXCEPTION. Les messages Symfony Messenger sont aussi auto-instrumentés.
<?phprequire_once __DIR__ . '/vendor/autoload.php';
use Pionne\Pionne;
Pionne::init([ 'token' => 'pio_live_…', 'environment' => 'production', 'release' => '1.0.0',]);
try { doSomething();} catch (\Throwable $e) { Pionne::captureException($e);}Pionne::init(['token' => '…', 'environment' => '…']);Pionne::captureException($e, ['tags' => ['feature' => 'checkout']]);Pionne::captureMessage('Cache miss', ['level' => 'warning']);Pionne::setUser(['id' => 'user_42']);Pionne::setTags(['region' => 'eu-west-1']);Pionne::setEnabled(false);Pionne::addBreadcrumb(['category' => 'db', 'message' => 'SELECT ...']);Queue jobs
Section intitulée « Queue jobs »- Laravel queue : auto-instrumenté (events
JobFailed) - Symfony Messenger : auto-instrumenté (subscriber sur
WorkerMessageFailedEvent) - Custom worker : wrap manuellement
try { $job->handle();} catch (\Throwable $e) { Pionne::captureException($e, [ 'tags' => ['job' => get_class($job)], 'contexts' => ['job' => ['attempts' => $job->attempts()]], ]); throw $e;}Anti-token-theft
Section intitulée « Anti-token-theft »Le hostname (gethostname()) est auto-pinné côté serveur au premier event. Si ton token fuite et qu’il est utilisé depuis un autre serveur, les events sont rejetés.
Voir aussi
Section intitulée « Voir aussi »- Index des SDKs — tous les SDKs Pionne
- API Ingest — protocole HTTP brut