manuelj555/upload-data-bundle
A lightweight PHP bundle for handling data uploads and import workflows. It integrates into Composer-based projects and offers a simple way to add file upload and data processing support to your application.
config/upload-data.php, and no facade. composer require manuelj555/upload-data-bundle inside a Laravel app will pull Symfony bundle scaffolding you cannot boot cleanly. If you are on Laravel, treat this as a reference implementation to copy patterns from, not a dependency.config/bundles.php (new Manuelj555\UploadDataBundle\UploadDataBundle()), then check the bundle's DependencyInjection/ directory and Resources/config/ for the actual service IDs and configuration keys. The README is the only documentation and it is thin.README.md → composer.json (PHP/Symfony constraints) → DependencyInjection/Configuration.php (the real config surface) → Entity/ or Model/ (what gets persisted) → Service/ (the upload/parse logic you'd actually reuse).StoreUploadedFile action that validates, moves to storage/app/data/, and persists an Upload model. Use the bundle as a spec for what metadata to capture, not as a runtime dependency.ImportUploadJob on ingest and update the upload record's status (pending → processing → imported/failed) so the UI can poll. This is a pattern the original bundle almost certainly did not include and you will need regardless.column_map JSON column on your upload record, not in bundle-provided code.interface DataFileIngestor { public function ingest(UploadedFile $f): UploadRecord; } and adapt the bundle service to it. That single seam lets you drop the bundle later without touching controllers.UploadedFile::store() for placement, a Uploads model with $casts for metadata, Storage::disk('data') for the filesystem abstraction, a ShouldQueue job for parsing, and a UploadImported event for downstream fan-out. That is roughly what this bundle is trying to give you, but maintained.validation config for this.; vs , delimiters, CRLF inside quoted fields, and Excel saving UTF-16. Detect encoding on read and normalise to UTF-8 before touching headers.file_get_contents + str_getcsv on a 50 MB file will blow memory_limit. Stream with fgetcsv and chunk inserts (e.g. 500 rows) — Symfony's StreamedResponse/league/csv or Laravel's LazyCollection both fit.bin/console debug:container | grep -i upload to discover the service IDs, and debug:config for the config tree. In a Laravel port there's no equivalent — read the source, don't guess.services.yaml, form type extension via AbstractTypeExtension, and Doctrine event subscribers for post-persist hooks. If you fork, that's where your customisations belong — not by editing vendor files.composer.json. A 2019 bundle will typically declare symfony/*: ^3.4|^4.0 and php: ^7.1, which composer will refuse on a modern stack. If that's the case, the decision is made for you.league/csv (streaming CSV), PhpOffice/PhpSpreadsheet (XLSX), Laravel's built-in Storage + UploadedFile, or maatwebsite/excel if you're on Laravel and the files are spreadsheets. Any of these is better maintained than this bundle and covers 90% of the same ground.How can I help you explore Laravel packages today?