https://github.com/thib92/flysystem-public-url-plugin
Flysystem plugin to get the public URL of a file
https://github.com/thib92/flysystem-public-url-plugin
flysystem flysystem-plugin php symfony
Last synced: 6 months ago
JSON representation
Flysystem plugin to get the public URL of a file
- Host: GitHub
- URL: https://github.com/thib92/flysystem-public-url-plugin
- Owner: thib92
- Created: 2019-05-01T20:30:08.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2022-06-21T17:49:09.000Z (over 3 years ago)
- Last Synced: 2025-06-30T14:07:33.936Z (8 months ago)
- Topics: flysystem, flysystem-plugin, php, symfony
- Language: PHP
- Size: 62.5 KB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Flysystem Public URL Plugin
This repo is a plugin for the [Flysystem](https://flysystem.thephpleague.com/docs/) PHP library.
It allows you to get a public URL to access a file.
## Getting started
Start by adding this plugin to your dependencies using Compose:
```bash
composer require thib92/flysystem-public-url-plugin
```
Then, add the plugin to your Flysystem filesystem:
```php
addPlugin(new \Thib\FlysystemPublicUrlPlugin\PublicUrlPlugin);
```
Finally, use it as a regular Flysystem plugin:
```php
getPublicUrl("/path/to/my/file");
```
## Supported adapters
The supported Flysystem adapters are:
* [Local](https://flysystem.thephpleague.com/docs/adapter/local/) : [LocalUrlAdapter](./src/Adapter/LocalUrlAdapter.php)
* [AWS S3 v3](https://flysystem.thephpleague.com/docs/adapter/aws-s3/) : [LocalUrlAdapter](./src/Adapter/AwsS3UrlAdapter.php)
## Adapters options
Some adapters need options.
For example, the `Local` Flysystem does not know if the upload directory is served by a webserver.
In order to set settings, you can use the `setParam` method of the `PublicUrlPlugin`. For example:
```php
setParam(\Thib\FlysystemPublicUrlPlugin\Adapter\LocalUrlAdapter::class, [
"/path/to/webserver/root"
]);
```
The first argument of `setParam` is the class of the PublicUrlAdapter you use.
The second one is a sequential array of constructor arguments for this adapter.
Refer to the individual adapter documentations below to know what to set
## Adapters reference
| Flysystem Adapter | Public URL Adapter | Constructor arguments |
|-------------------|--------------------|------------------------------|
| Local | LocalUrlAdapter | * Public webserver root path |
| AWS S3 v3 | AwsS3UrlAdapter | None |
## Adding your own adapter
If you need an adapter for another Flysystem adapter, two steps are required:
### 1. Create your Adapter class
Your Adapter class will need to extend the [AbstractPublicUrlAdapter](./src/Adapter/AbstractPublicUrlAdapter.php).
You will directly get a reference to the filesystem instance with `$this->filesystem`.
You will need to implement the `getPublicUrl(string $path): string` method.
### 2. Register it in the plugin
Then you need to use the `PublicUrlPlugin::addAdapter` method to register your adapter.
This method takes 3 arguments:
* The Flysystem adapter class that your PublicUrlAdapter works for
* Your PublicUrlAdapter class (the plugin will create a new instance on every call to `getPublicUrl()`)
* Optional: an array of constructor arguments, see [Adapter Options](#adapters-options)
## Contributing
I only created this plugin for the needs of a project I had. I only used the AWS S3 and the Local adapters.
Therefore, if you create an adapter, feel free to create a PR on this repo with your code.
Don't forget to add tests:
* Unit tests in the [tests/Adapter](./tests/Adapter) folder
* Integration tests in [tests/PublicUrlPluginTest](./tests/PublicUrlPluginTest.php) file for an integration test to the plugin