phpcr / phpcr-migrations
Migrations for PHPCR
Installs: 1 093 488
Dependents: 3
Suggesters: 0
Security: 0
Stars: 39
Watchers: 7
Forks: 6
Open Issues: 3
Requires
- php: ^8.1
- phpcr/phpcr: ^2.1
- symfony/console: ^5.4 || ^6.0 || ^7.0
- symfony/finder: ^5.4 || ^6.0 || ^7.0
Requires (Dev)
- handcraftedinthealps/zendsearch: ^2.0
- jackalope/jackalope-fs: ^0.0.4
- phpunit/phpunit: ^9.4
README
Migrations library for PHPCR influenced by Doctrine migrations.
For integration with Symfony see the PHPCR Migrations Bundle.
Usage
<?php use Symfony\Component\Console\Output\NullOutput; use PHPCR\Migrations\VersionStorage; use PHPCR\Migrations\VersionFinder; use PHPCR\Migrations\Migrator; $storage = new VersionStorage($phpcrSession); $finder = new VersionFinder(['/path/to/migrations']); $versions = $finder->getVersionCollection(); $migrator = new Migrator($session, $versionCollection, $storage); $to = '201504241744'; $output = new NullOutput(); $migrator->migrate($to, $output);
You may also create a factory class (useful when you use dependency injection):
<?php
$factory = new MigratorFactory($storage, $finder, $session);
$migrator = $factory->getMigrator();
Initializing
When you install a project for the first time you need to initialize the versions:
<?php
$migrator->initialize();
This should be part of your build process and it will add all the versions to the migration version node in the content repository.
Migrating
$migrator->migrate('201501011200', $output); // migrate to a specific version $migrator->migrate('up', $output); // migrate up a version $migrator->migrate('down', $output); // migrate down a version $migrator->migrate('top', $output); // migrate to the latest version $migrator->migrate('bottom', $output); // revert all versions
Listing versions
You can access information about available versions from the
VersionCollection
object:
$versionCollection->getAllVersions();
Determining the current version
You can determine the current version from the VersionStorage
object:
$versionStroage->getCurrentVersion();
Version classes
Version classes contain up
and down
methods. The class is quite simple:
<?php use PHPCR\Migrations\VersionInterface; class Version201504241200 implements VersionInterface { public function up(SessionInterface $session) { $session->doSomething(); } public function down(SessionInterface $session) { $session->undoSomething(); } }
They must be named VersionYYYMMDDHHMM
. If they are not so named, then they
will not be detected.
The down
method should revert any changes made in the up
method. Always
check that revcerting your migration works.