ajgl/flysystem-replicate

Flysystem Adapter for Replication

Maintainers

👁 ajgarlag

Package info

github.com/ajgarlag/flysystem-replicate

pkg:composer/ajgl/flysystem-replicate

Statistics

Installs: 91 009

Dependents: 2

Suggesters: 1

Stars: 4

Open Issues: 0

2.3.0 2025-11-24 10:33 UTC

Requires

Suggests

None

Provides

None

Conflicts

None

MIT 9e3c2d7693322da5a1b20aeebebd87e2f9e7591f

  • Antonio J. García Lagar <aj.woop@garcialagar.es>

This package is auto-updated.

Last update: 2026-06-24 11:41:56 UTC


README

This package is forked from the original league/flysystem-replicate-adapter written by @frankdejonge. The goal is to provide support for Flysystem V3

Installation

composer require ajgl/flysystem-replicate

Usage

$source = new League\Flysystem\AwsS3V3\AwsS3V3Adapter(...);
$replica = new League\Flysystem\Local\LocalFilesystemAdapter(...);
$adapter = new Ajgl\Flysystem\Replicate\ReplicateFilesystemAdapter($source, $replica);

What's cool about this is that you can chain them to replicate to more then 1 other storage system.

$adapter = new Ajgl\Flysystem\Replicate\ReplicateFilesystemAdapter($source, $replica);

$anotherReplica = new League\Flysystem\WebDAV\WebDAVAdapter(...);
$adapter = new Ajgl\Flysystem\Replicate\ReplicateFilesystemAdapter($adapter, $anotherReplica);

Symfony usage with league/flysystem-bundle

If you have league/flysystem-bundle installed in your Symfony application, you have to define the replicate adapter service referencing your source and replica storages.

# config/services.yaml
services:
 app.replicate.storage:
 class: Ajgl\Flysystem\Replicate\ReplicateFilesystemAdapter
 arguments: ['@flysystem.adapter.source.storage', '@flysystem.adapter.replica.storage']

Then, you have to define a custom adapter in the league/flysystem-bundle configuration.

# config/packages/flysystem.yaml
flysystem:
 storages:
 source.storage:
 adapter: 'local'
 options:
 directory: '%kernel.project_dir%/var/storage'
 replica.storage:
 adapter: 'aws'
 options:
 client: 'aws.client'
 bucket: 'storage'
 replicate.storage:
 adapter: 'app.replicate.storage'