onurb/excel-bundle
Symfony bundle that integrates PHPExcel to read and write Excel spreadsheets, exposing the library as a service with helpers for controllers and templates. Simplifies importing data from and exporting data to XLS/XLSX files in Symfony applications.
Architecture fit. onurb/excel-bundle is a Symfony bundle, not a Laravel package. Its functional surface is thin: it wires phpoffice/phpspreadsheet into Symfony's DI container, exposes configuration for reader/writer services, and packages format handlers (XLSX, ODS, CSV, PDF, HTML). In a Laravel codebase there is no bundle registration mechanism — the abstraction provides no benefit, and the real value (PhpSpreadsheet) is framework-agnostic and already installable via Composer. Architectural fit for a Laravel stack is therefore poor as a direct dependency, but acceptable as a reference implementation if we need multi-format read/write semantics.
Integration feasibility. Two viable paths: (a) depend on phpoffice/phpspreadsheet directly and write a small internal service wrapper (~100–200 LOC) for format detection, IO, and temp-file handling; (b) adopt maatwebsite/excel if the use case is import/export-to-model. Porting the bundle itself into a Laravel service provider is possible — its service definitions are simple — but we would be re-hosting a 13-star, single-maintainer artifact with 0 dependents, which is a weak signal of production hardening.
Technical risk.
symfony/* transitives, forcing resolution gymnastics.Key questions for the team.
maatwebsite/excel or raw PhpSpreadsheet elsewhere? Duplication is the main cost here.Stack fit. Treat this as not fit-for-purpose for Laravel. The bundle's only genuine differentiator is Symfony service wiring, which Laravel replaces with its own container and service provider pattern. The correct integration is at the library layer, not the bundle layer.
Recommended path (in preference order).
SpreadsheetService (or a thin domain port) if we need multi-format IO and full control over readers/writers. Lowest dependency surface, highest control.maatwebsite/excel if the workload is conventional model import/export with queued chunking — it is the Laravel-idiomatic choice and has the ecosystem weight this bundle lacks.Migration path. If a sibling Symfony service already uses this bundle, leave it there — do not destabilize a working service to achieve cosmetic parity. For the Laravel side, extract the format-resolution logic (extension/MIME → reader/writer) into a shared internal spec so both stacks behave identically, then implement it natively in Laravel. If we are replacing an existing phpexcel-era integration, migrate directly to PhpSpreadsheet (or maatwebsite/excel) rather than routing through this bundle.
Compatibility checks before committing.
ext-zip, ext-gd, ext-xml, ext-mbstring, ext-fileinfo).symfony/* ranges versus the Laravel version in use — run composer why-not against the target framework release.Sequencing.
Maintenance. Effectively we own it. With 13 stars and zero dependents there is no community to absorb upgrades, and issue response is likely best-effort. Budget for periodic PhpSpreadsheet bumps, PHP-version compatibility patches, and format-handler drift (especially ODS/PDF). If we fork, add it to the internal dependency register with an explicit owner and review cadence.
Support. No vendor, no SLA, no commercial backing. Escalation is "read the source." This is acceptable for a small, well-understood adapter and unacceptable for a revenue-critical export path without the internal wrapper insulating us.
Scaling. The binding constraint is memory, not the bundle. Mitigations: hard file-size caps at the upload boundary, readDataOnly and chunked/streamed reading for imports, queued generation with dedicated workers for exports, and explicit disconnectWorksheets()/unset discipline to avoid leaks in long-running workers. PDF generation adds CPU-bound rendering — isolate it from the web tier. At the expected envelope this is routine; at high volume it becomes a capacity-planning problem independent of package choice.
Failure modes to instrument.
=, +, -, @).Ramp-up. Low. Any engineer familiar with PhpSpreadsheet is productive in hours; the bundle's conventions are minor and mostly Symfony-specific. The real onboarding cost is the operational envelope — file-size limits, queue topology, and cleanup behavior — which should be documented alongside the wrapper. Allocate roughly a day of enablement plus a written runbook covering failure triage.
Bottom line. The package's score (0.535) and opportunity signal (22.61) are consistent with a low-adoption, single-maintainer Symfony wrapper. For a Laravel stack, the correct TPM call is to decline the bundle as a dependency, adopt PhpSpreadsheet or maatwebsite/excel directly, encapsulate it behind an internal interface, and treat the bundle as documentation of patterns rather than a component to install.
How can I help you explore Laravel packages today?