To install flysystem-bunnycdn
, require the package with no version constraint. This should match the flysystem-bunnycdn
version with your version of FlySystem (v2, v3 etc).
composer require platformcommunity/flysystem-bunnycdn "*"
use League\Flysystem\Filesystem;
use PlatformCommunity\Flysystem\BunnyCDN\BunnyCDNAdapter;
use PlatformCommunity\Flysystem\BunnyCDN\BunnyCDNClient;
use PlatformCommunity\Flysystem\BunnyCDN\BunnyCDNRegion;
$adapter = new BunnyCDNAdapter(
new BunnyCDNClient(
'storage-zone',
'api-key',
BunnyCDNRegion::FALKENSTEIN
)
);
$filesystem = new Filesystem($adapter);
To have BunnyCDN adapter publish to a public CDN location, you have to a "Pull Zone" connected to your BunnyCDN Storage Zone. Add the full URL prefix of your Pull Zone (including http://
/https://
) to the BunnyCDNAdapter parameter like shown below.
$adapter = new BunnyCDNAdapter(
new BunnyCDNClient(
'storage-zone',
'api-key',
BunnyCDNRegion::FALKENSTEIN
),
'https://testing.b-cdn.net/' # Pull Zone URL
);
$filesystem = new Filesystem($adapter);
Note: You can also use your own domain name if it's configured in the pull zone.
Once you add your pull zone, you can use the ->getUrl($path)
, or in Laravel, the ->url($path)
command to get the fully qualified public URL of your BunnyCDN assets.
To add BunnyCDN adapter as a custom storage adapter in Laravel 9, install using the v3
composer installer.
composer require platformcommunity/flysystem-bunnycdn "^3.0"
Next, install the adapter to your AppServiceProvider
to give Laravel's FileSystem knowledge of the BunnyCDN adapter.
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Storage::extend('bunnycdn', function ($app, $config) {
$adapter = new BunnyCDNAdapter(
new BunnyCDNClient(
$config['storage_zone'],
$config['api_key'],
$config['region']
),
$config['pull_zone']
);
return new FilesystemAdapter(
new Filesystem($adapter, $config),
$adapter,
$config
);
});
}
Finally, add the bunnycdn
driver into your config/filesystems.php
configuration file.
...
'bunnycdn' => [
'driver' => 'bunnycdn',
'storage_zone' => env('BUNNYCDN_STORAGE_ZONE'),
'pull_zone' => env('BUNNYCDN_PULL_ZONE'),
'api_key' => env('BUNNYCDN_API_KEY'),
'region' => env('BUNNYCDN_REGION', \PlatformCommunity\Flysystem\BunnyCDN\BunnyCDNRegion::DEFAULT)
],
...
Lastly, populate your BUNNYCDN_STORAGE_ZONE
, BUNNYCDN_API_KEY
BUNNYCDN_REGION
variables in your .env
file.
BUNNYCDN_STORAGE_ZONE=testing_storage_zone
BUNNYCDN_PULL_ZONE=https://testing.b-cdn.net
BUNNYCDN_API_KEY="api-key"
# BUNNYCDN_REGION=uk
After that, you can use the bunnycdn
disk in Laravel 9.
Storage::disk('bunnycdn')->put('index.html', '<html>Hello World</html>');
return response(Storage::disk('bunnycdn')->get('index.html'));
Note: You may have to run php artisan config:clear
in order for your configuration to be refreshed if your app is running with a config cache driver / production mode.
For a full region list, please visit the BunnyCDN API documentation page.
flysystem-bunnycdn
also comes with constants for each region located within PlatformCommunity\Flysystem\BunnyCDN\BunnyCDNRegion
.
# Europe
BunnyCDNRegion::FALKENSTEIN = 'de';
BunnyCDNRegion::STOCKHOLM = 'se';
# United Kingdom
BunnyCDNRegion::UNITED_KINGDOM = 'uk';
# USA
BunnyCDNRegion::NEW_YORK = 'ny';
BunnyCDNRegion::LOS_ANGELAS = 'la';
# SEA
BunnyCDNRegion::SINGAPORE = 'sg';
# Oceania
BunnyCDNRegion::SYDNEY = 'syd';
# Africa
BunnyCDNRegion::JOHANNESBURG = 'jh';
# South America
BunnyCDNRegion::BRAZIL = 'br';
Pull requests welcome. Please feel free to lodge any issues as discussion points.
Most of the understanding of how the Flysystem Adapter for BunnyCDN works comes from tests/
. If you want to complete tests against a live BunnyCDN endpoint, copy the tests/ClientDI_Example.php
to tests/ClientDI.php
and insert your credentials into there. You can then run the whole suite by running vendor/bin/phpunit
, or against a specific file by running vendor/bin/phpunit --bootstrap tests/ClientDI.php tests/ClientTest.php
.
The Flysystem adapter for Bunny.net is licensed under MIT.