edges / synchronizer
Synchronize all kinds of things
Deleted by maintainer on 2026-08-12 16:09:10 UTC
Requires
- php: ^8.0
README
Эта библиотека позволяет легко синхронизировать самые разные вещи. Он имеет красивый и простой в использовании API.
Использование
Подключите к своему коду autoload.php и используйте классы:
namespace Acme\MyApplication; // To create a Synchronizer: use Edges\Synchronizer\MatcherInterface; use Edges\Synchronizer\SynchronizerSourceInterface; use Edges\Synchronizer\SynchronizerTargetInterface; use Edges\Synchronizer\AbstractSynchronizer; // To make your project compatible with Synchronizer: use Edges\Synchronizer\SynchronizerInterface; require 'vendor/autoload.php';
Создайте сущность с которой будете работать
class ExampleEntity { private string $identifier; public function setIdentifier(string $identifier): self { $this->identifier = $identifier; return $this; } public function getIdentifier(): string; { return $this->identifier; } }
Создайте источники и цели синхронизатора:
/** * @implements SynchronizerSourceInterface<ExampleSourceSettings> */ class ExampleSource implements SynchronizerSourceInterface { public function __construct(private ExampleSourceSettings $settings) { // ... } /** * Создать источник * * @param Settings $settings Настройки для источника * * @return SynchronizerSourceInterface */ public static function create(object|ExampleSourceSettings $settings): SynchronizerSourceInterface { if (! $settings instanceof ExampleSourceSettings) { throw new \InvalidArgumentException( sprintf( 'Settings [%s] does not supports for [%s]', $settings::class, ExampleSource::class, ) ); } return new ExampleSource($settings); } } /** * @implements SynchronizerTargetInterface<ExampleTargetSettings> */ class ExampleTarget implements SynchronizerTargetInterface { public function __construct(private ExampleTargetSettings $settings) { // ... } /** * Создать источник * * @param Settings $settings Настройки для источника * * @return SynchronizerTargetInterface */ public static function create(object|ExampleTargetSettings $settings): SynchronizerTargetInterface { if (! $settings instanceof ExampleTargetSettings) { throw new \InvalidArgumentException( sprintf( 'Settings [%s] does not supports for [%s]', $settings::class, ExampleTarget::class, ) ); } return new ExampleTarget($settings); } }
Создайте Matcher для сопоставления объектов
/** * @implements MatcherInterface<ExampleEntity> */ class ExampleMatcher implements MatcherInterface { private array $matches = []; public function match(array $sources): void { // Логика создания matches } public function getMatches(): array { return $this->matches; } }
Создайте свой синхронизатор:
/** * @extends AbstractSynchronizer<ExampleEntity, ExampleSource, ExampleTarget, ExampleMatcher, ExampleSettings> */ class ExampleSynchronizer implements AbstractSynchronizer { /** * Синхронизировать * * @param object|ExampleSettings $settings Настройки для синхронизации * * @return bool */ public function synchronize(object|ExampleSettings $settings): bool { if (! $settings instanceof ExampleSettings) { throw new \InvalidArgumentException( sprintf( 'Settings of [%s] does not supports for [%s]', $settings::class, ExampleSynchronizer::class, ) ); } // Какая-то логика return true; } public static function supportsSource(SynchronizerSourceInterface $source): bool { return $source instanceof ExampleSource; } public static function supportsTarget(SynchronizerTargetInterface $target): bool { return $target instanceof ExampleTarget; } public static function supportsMatcher(MatcherInterface $matcher): bool { return $matcher instanceof ExampleMatcher; } }
Создайте свой проект, совместимый с синхронизатором:
class Application { /** * Синхронизатор * * @var SynchronizerInterface */ protected SynchronizerInterface $synchronizer; /** * Установить синхронизатор * * @param SynchronizerInterface $synchronizer Синхронизатор */ public function setSynchronizer(SynchronizerInterface $synchronizer): static { $this->synchronizer = $synchronizer; } // ... }
Установка
Через Composer
Install Composer если composer не установлен:
$ curl -sS https://getcomposer.org/installer | php
Установите библиотеку, эта команда установит самую последнюю версию пакета
$ composer require whatis/synchronizer
Требования
- Ваша версия php должна быть не меньше 8.0
- Есть расширение ds (ext-ds) не меньше 1.3.0
Участие
Если хотите поучавствовать в разработке, пожалуйста, сначала прочитайте CONTRIBUTING.