mesd/phantasos-client-bundle
A Symfony bundle that wires the Phantasos PHP client into your application, handling service configuration and dependency injection so you can inject the client and call the Phantasos API from your controllers and services with minimal setup.
Reality check before you type composer require: mesd/phantasos-client-bundle is a Symfony bundle, not a Laravel package. It carries zero stars, zero dependents, and its last release was September 2017. There is no Laravel service provider, no facade, and no extra.laravel auto-discovery block. Treat this as "source you can study or vendor," not "a dependency you install into a modern Laravel app."
Minimal steps to evaluate it:
composer.json first. Note the required PHP version (likely 5.6/7.0-era) and the symfony/* constraints. If it pins Symfony 2.x/3.x components, installing it alongside a current Laravel (which ships Symfony 6/7 components) will almost certainly cause Composer resolution conflicts.DependencyInjection/ (the bundle extension and configuration class) and Resources/config/ (usually services.yml or services.xml). That is where the actual wiring lives — service IDs, constructor arguments, and the config tree root. This tells you more than the README will.Client/ or Service/). Identify whether it wraps Guzzle, a raw cURL handler, or something custom, and what the constructor needs (base URI, credentials, HTTP client).Tests/ if present. Fixtures and mocked responses are the fastest way to understand the expected request/response shapes.First use case: skip the bundle entirely. Copy the client class into app/Services/Phantasos/ (or a small local package), replace its Symfony-coupled dependencies with Laravel's HTTP client or a Guzzle instance from the container, and call it from a single artisan command or tinker session against a sandbox endpoint. Confirm the API contract works before investing in integration.
If you are actually in a Symfony app (the only environment this was designed for):
AppKernel/bundles.php, then configure it under whatever alias the extension exposes (check getAlias() in the DI extension — likely mesd_phantasos_client or similar).services.yml.If you are bridging it into Laravel (the realistic day-to-day scenario):
// app/Providers/PhantasosServiceProvider.php
public function register(): void
{
$this->app->singleton(PhantasosClient::class, function ($app) {
return new PhantasosClient(
baseUri: config('services.phantasos.url'),
http: $app->make(\GuzzleHttp\Client::class),
);
});
}
config/services.php and .env (PHANTASOS_URL, PHANTASOS_TOKEN). Never hardcode the base URI the way a Symfony parameters.yml would have.Http:: facade so the rest of your code stays framework-native.ShouldQueue job with retryUntil and exponential backoff rather than calling it inline in a request.Cache::remember() keyed by the request payload hash. This is the single biggest win in day-to-day use and insulates you from client flakiness.Http::fake() in Laravel means you never need to instantiate the 2017 client in tests at all — another reason to adapt rather than depend.Integration tips: define a PhantasosGateway interface in your domain, implement LegacyPhantasosGateway (adapts the bundle) and HttpPhantasosGateway (native Laravel HTTP). Ship the legacy one behind a config flag, and you can retire it without touching call sites.
composer audit and expect noise.symfony/* versions will fight your framework. Use composer why-not and composer depends to see the conflict tree before wasting an afternoon.php artisan vendor:publish path.Resources/config/services.yml is Symfony DI syntax; do not try to parse it in Laravel. Read it as documentation of constructor arguments only.arguments: or a compiler pass alias.bin/console debug:container <service-id> and debug:config <alias> confirm the extension actually registered and what the resolved config tree looks like.app(PhantasosClient::class) in tinker, and log raw request/response pairs from the HTTP layer (Guzzle middleware or Http::withOptions(['debug' => true]) in a local env).Configuration class to see which nodes are isRequired().decorates:) or Laravel's container rebinding over forking. Decorating keeps the original intact and makes the upgrade path (or removal) trivial.^ ranges to float — the package is not maintained, so the "latest available" is frozen anyway.Http facade in an afternoon, and you avoid an unmaintainable, zero-star, decade-old Symfony dependency.How can I help you explore Laravel packages today?