platformcommunity/flysystem-bunnycdn
A Flysystem adapter for BunnyCDN storage that lets Laravel apps use BunnyCDN as a filesystem disk. Upload, read, delete, and list files through Laravel's Storage facade, with support for Flysystem v3 and BunnyCDN storage zones. Simple to configure and framework-friendly.
https://{region}.storage.bunnycdn.com/{zone}//), which the Bunny API rejects — root listings (e.g. Laravel's allFiles()) could come back empty (#75). Paths are now normalized in a single place, and a regression test asserts the exact request URI.BunnyCDNAdapter constructor argument is now a root path prefix, scoping all operations (write, read, list, delete, move, copy, URLs) to a subdirectory of the storage zone. Listed paths are root-relative; public and temporary URLs are root-scoped and signed against the root-scoped path. Resolves the long-requested "root" config support (#96, discussion #30).BunnyCDNAdapter::getTemporaryUrl() implements the method Laravel's FilesystemAdapter looks for, so Storage::disk('bunnycdn')->temporaryUrl() now works out of the box. Accepts a DateTimeInterface or minutes-from-now integer, plus additional query parameters that are signed into the URL (#97).^8.3 (PHP 8.2 reaches end-of-life 31 December 2026).fzaninotto/faker with fakerphp/faker (drop-in, same namespace).laravel/pint ^0.2.3 → ^1.30 (fixes PHP 8.5 deprecation warnings).phpunit/phpunit ^10.0 → ^11.5 (10.x is end-of-life; PHPUnit 12+ drops the doc-comment metadata support that flysystem-adapter-test-utilities relies on).phpstan.neon.dist; reported issues fixed.[@test](https://github.com/test) doc-comments to #[Test] attributes (deprecated in PHPUnit 11).actions/checkout@v7, shivammathur/setup-php@v2, actions/cache@v6, codecov/codecov-action@v7 (replacing the deprecated bash uploader); PHP matrix 8.3/8.4/8.5; PHPStan and Pint steps guarded so the shared workflow keeps working on the legacy v1/v2 branches.deleteDirectory('') could send a DELETE for the storage zone root — now guarded with UnableToDeleteDirectory.123) no longer fail download() with a TypeError — non-array JSON payloads return the raw body.parse_bunny_timestamp() no longer fatals on malformed timestamps (falls back to 0).writeBatch() failures now report the failing target path instead of a numeric batch index.lastModified() / fileSize() on directories now throw UnableToRetrieveMetadata explicitly instead of relying on a return-type TypeError.RootTest — full flysystem conformance suite against a root-scoped adapter, plus targeted root tests (trailing-slash normalization, root scoping, root-relative listings, root-signed temporary URLs, writeBatch with root, root + PathPrefixedAdapter composition).request() JSON decode edge cases, and full-URL temporary URLs with a root configured.For releases prior to v3.3.5, see the GitHub releases page.
How can I help you explore Laravel packages today?