rwsoft/excel-bundle
rwsoft/excel-bundle is a PHP package that provides a bundle-style wrapper for Excel spreadsheet handling, aimed at simplifying import and export tasks. It helps applications read uploaded workbooks and generate downloadable Excel files with minimal setup.
composer require <vendor>/<package>; no publish step is typically required for a streaming response helper, but check for a config file with php artisan vendor:publish if the README mentions one.StreamedResponse) and any service provider binding. Understanding the callback signature — it receives the output stream and you write to it — is the whole API surface.fputcsv()s rows one at a time.StreamedResponse, so Laravel's normal response preparation/sending path applies (no Content-Length, chunked delivery). That is the intended behavior — no code changes needed on your side.echo inside the callback and return something else.lazy(), chunkById(), or cursor() so rows are pulled as they are written. Keep the callback free of eager-loading surprises.Content-Type: text/csv and Content-Disposition: attachment in the response headers before returning, then write a header row followed by data rows inside the callback.Content-Type: text/event-stream, Cache-Control: no-cache, X-Accel-Buffering: no, and flush after every data: frame. Add a heartbeat/sleep loop for long-lived connections.$response->sendContent(), or assert status/headers only and cover the callback logic in a unit test.finally block.StreamedResponse, tests or clients that previously assumed a Content-Length header or a fully-buffered body may need updating.?>, a dd()/dump(), or a debug package that echoes will corrupt the stream or delay flushing. Call ob_end_flush()/ob_flush()/flush() as appropriate and audit for BOMs and trailing newlines in included files.session()->save() (or use a stateless/session-less middleware group) before the long-running loop.proxy_buffering/gzip and some CDNs buffer chunks until the response completes. Send X-Accel-Buffering: no and disable gzip for streaming routes; otherwise "streaming" looks identical to a normal response.Content-Type, and disposition before the first byte is written; you cannot change them mid-stream.get(); call set_time_limit(0) deliberately (and be aware CLI vs web limits differ). Watch for query logging and debug tooling holding references to every row.stderr, not to the response body. Telescope and similar tools can buffer or serialize the response; disable them for streaming routes when diagnosing.config:cache, route caches, and OPcache after upgrading. The StreamedResponse change is the one behavioral delta — re-run any tests that assert on headers, response class type, or body buffering.curl -N to confirm true incremental delivery before blaming the package.How can I help you explore Laravel packages today?