kuborgh/csv-bundle
Kuborgh CSV Bundle integrates CSV handling into Symfony applications, providing configurable services for reading, writing, and processing CSV files. It simplifies import/export tasks and keeps CSV logic reusable across your project.
Architecture fit
csv-bundle naming, the Kuborgh\CsvBundle namespace, and the bundle era place it in the Symfony 2.x/3.x ecosystem. There is still no Laravel service provider, no package auto-discovery entry, no facade, and no publishable config. v1.0.1 adds nothing here — "composer and travis adaption" is build metadata, not framework integration.fputcsv/fgetcsv plus League\Csv for edge cases). We would still be adopting an unfamiliar wrapper for a commodity primitive.symfony/* and php: >=5.5 are untouched, nothing has changed.Integration feasibility
Technical risk
composer require.=, +, -, @ prefixes) — are exactly where a tiny, dormant 2016 library is least likely to be hardened. Nothing in v1.0.1 touches them.Key questions
League\Csv or Spatie\SimpleExcel is a one-line decision? (Unchanged — still the first question.)php floor and symfony/* constraints move, and if so, does any accompanying code support that claim? This is the single highest-value thing to read, and it is a two-minute diff.composer require in a scratch container answers this definitively — and matters more now, since a widened constraint may let the install succeed and defer the failure to production.Stack fit
league/csv (streaming, RFC-compliant, actively maintained), spatie/simple-excel (Laravel-friendly, low ceremony), or maatwebsite/excel (if we need XLSX parity alongside CSV). v1.0.1 does not change this substitution math — a housekeeping release closes none of the capability or risk gap.Migration path
kuborgh/csv-bundle as a design reference only. Implement the conversion layer on league/csv behind a thin internal interface (e.g., CsvExporter/CsvImporter) so the underlying library remains swappable.Compatibility
composer.json require blocks and PHP floor first; this is the go/no-go gate. Expect conflicts with Laravel's Symfony constraints — and treat an unexpectedly permissive block as a red flag requiring code verification, not as a green light.DependencyInjection/*Extension.php and *Bundle.php — if so, it is container-coupled and effectively unusable outside Symfony without a shim.each(), create_function, curly-brace string offsets, and implicit nullable parameter signatures. This check is unchanged by the release and is now the deciding test.Sequencing
league/csv (or equivalent) unless the spike surfaces a capability we cannot replicate. The ADR should explicitly cite v1.0.1 and state that a no-code-change housekeeping release was considered and did not alter the conclusion, so the decision is not relitigated at the next trivial upstream commit.CsvImporter/CsvExporter interfaces, streaming reads, explicit delimiter/enclosure/escape config, formula-injection sanitization on export, encoding normalization on import, and a fixture-based test suite including adversarial CSV (embedded newlines, quoted commas, BOM, mixed line endings).Maintenance
league/csv has an active release cadence and a security disclosure path — operationally, that is the whole argument, and v1.0.1 does not touch it.Support
Scaling
memory_limit long before it stresses CPU.php://output or a temp stream). A 2016 array-in/array-out library gives us no streaming surface; adopting it would mean building the streaming layer ourselves anyway.Failure modes
Ramp-up
How can I help you explore Laravel packages today?