yiisoft / response-download
The package provides a factory to help forming file download PSR-7 response.
Fund package maintenance!
Opencollective
yiisoft
Requires
- php: ^8.1
- ext-fileinfo: *
- psr/http-factory: ^1.0
- psr/http-message: ^1.0
- yiisoft/http: ^1.2
Requires (Dev)
- httpsoft/http-message: ^1.0
- maglnet/composer-require-checker: ^4.3
- phpunit/phpunit: ^9.5
- rector/rector: ^0.15.19
- roave/infection-static-analysis-plugin: ^1.16
- spatie/phpunit-watcher: ^1.23
- vimeo/psalm: ^5.8
This package is auto-updated.
Last update: 2023-09-18 08:01:36 UTC
README
Yii PSR-7 download response factory
The package provides a factory to help forming file download PSR-7 response.
Requirements
- PHP 8.1 or higher.
Installation
The package could be installed with composer:
composer require yiisoft/response-download
General usage
Use the factory to form a response:
use Psr\Http\Message\ResponseInterface; use Yiisoft\ResponseDownload\DownloadResponseFactory; final class MyController { public function __construct( private readonly DownloadResponseFactory $downloadResponseFactory, ) { } public function sendMyContentAsFile(): ResponseInterface { return $this->downloadResponseFactory->sendContentAsFile('Hello!', 'message.txt'); } public function sendMyFile(): ResponseInterface { return $this->downloadResponseFactory->sendFile('message.txt'); } public function xSendMyFile(): ResponseInterface { return $this->downloadResponseFactory->xSendFile('message.txt'); } public function sendMyStreamAsFile(): ResponseInterface { $stream = new MyStream(); return $this->downloadResponseFactory->sendStreamAsFile($stream, 'message.txt'); } }
Note the xSendFile()
. It is a special method that delegates the hard work to the web server instead of serving the
file using PHP.
Optional arguments and defaults:
- If attachment name is not specified in
sendFile()
orxSendFile()
, it will be taken from the name of the file - served.
- Each file sending method could also be provided with optional mime type and optional content disposition.
- If mime type is omitted, for
sendFile()
andxSendFile()
it will be determined based on the file content. For other methods or when unable to determine the mime type, "application/octet-stream" will be used. - Content disposition is "attachment" by default. It will trigger browser's download dialog. If you want the content
of the file to be displayed inline, set it to
Yiisoft\Http\ContentDispositionHeader\ContentDispositionHeader::INLINE
.
Contributing
Unit testing
The package is tested with PHPUnit. To run tests:
./vendor/bin/phpunit
Mutation testing
The package tests are checked with Infection mutation framework with Infection Static Analysis Plugin. To run it:
./vendor/bin/roave-infection-static-analysis-plugin
Static analysis
The code is statically analyzed with Psalm. To run static analysis:
./vendor/bin/psalm
Code style
Use Rector to make codebase follow some specific rules or use either newest or any specific version of PHP:
./vendor/bin/rector
Dependencies
Use ComposerRequireChecker to detect transitive Composer dependencies.
License
The Yii response-download is free software. It is released under the terms of the BSD License.
Please see LICENSE
for more information.
Maintained by Yii Software.