answear/luigis-box-bundle
Symfony bundle for integrating Luigi's Box search and content updates. Configure public/private keys, hosts, timeouts, cache TTL, multiple or dynamic configs and custom headers, then send content updates and search requests through simple services.
ContentUpdate, PartialContentUpdate, ContentRemoval, ContentAvailability), a fluent SearchUrlBuilder (filters, preferences, sort, dynamic facets), a recommendations request, and update-by-query jobs with status polling. Buying (free, MIT) here is defensible for a Symfony shop; the build cost you avoid is mostly DTO/exception plumbing, not business logic.ConfigProvider supports named configs, runtime addConfig(), per-config timeouts, and custom headers. That's a decision input for whether one deployment serves multiple storefronts or you spin up per-brand instances.TooManyRequestsException exposes retryAfterSeconds, TooManyItemsException exposes the batch limit, and ApiResponse reports per-document $okCount/$errors with url/type/reason. That directly informs your retry policy, batch sizes, dead-letter handling, and the "partial success" UX question — note $success is false if any document fails, so a naive boolean check will mislead you.Consider it when:
Look elsewhere, or budget adapter work, when:
To executives: Luigi's Box is a buy-decision we can de-risk in weeks, not quarters. This package — MIT, actively released (up through Symfony 7 / PHP 8.4, with recommendations and dynamic facets added in recent versions) — removes the integration engineering from the equation, so the real conversation becomes commercial: license cost, relevance quality, and merchandising control. It lets us run a credible bake-off and get a search experience in front of customers fast. Two caveats to state plainly: it is an open-source bundle maintained by one retailer, not an official Luigi's Box SDK, and it is Symfony-only — if we standardize on Laravel, we own a small adapter ourselves.
To engineering: This is a thin, typed Symfony integration, not a framework. What you get for free: config-driven multi-tenant credentials with dynamic override, split timeouts (connection/request/search) and a search cache TTL you control up to Luigi's Box's 300s hard limit, DTOs for full/partial/removal/availability content updates, a fluent search URL builder with filters/prefer/sort/facets, recommendations, and update-by-query with job polling. Error handling is the strongest part: distinct exceptions with actionable payloads (retryAfterSeconds, batch limit, raw response), and per-document errors with URL/reason so partial failures are diagnosable.
What we still own, and should plan for: queueing/retry orchestration around those exceptions (the bundle is synchronous HTTP), treating $success === false as "inspect $errors" rather than "retry everything," an idempotent full-resync job as a safety net, and metrics on index lag and error rate. Mitigations for the maturity risk: pin an exact version, wrap the bundle behind our own SearchGateway/IndexGateway interfaces so swapping to a direct client or another vendor is a one-file change, and keep the integration confined to one module. Do not let its DTOs leak into controllers or domain models.
How can I help you explore Laravel packages today?