Set of tools for Composer scripts
Retrieve the full install path of a package
<?php
use Composer\Script\Event;
use WMC\Composer\Utils\Composer\PackageLocator;
class ScriptHandler
{
public static function myHandler(Event $event)
{
$directory = PackageLocator::getPackagePath($event->getComposer(), 'composer/composer');
}
}
?>Short relative path from a file/folder to a file/folder
<?php
use WMC\Composer\Utils\Filesystem\PathUtil;
$relPath = PathUtil::getRelativePath('/tmp/foo/bar', '/tmp/baz'); // ../foo/bar
?>Asks interactively for values to fill a configuration file Values asked are taken from a dist file where its values are used are default values
Ex: ask for database configuration with:
; database.dist.ini
user=root
pass=root
name=my_database
host=localhostBy default, it with read values from environment, using the filename as a prefix. Ex: DATABASE_USER
You can override this by specifying a custom environment map using setEnvMap(array('field' => 'ENV'))
By default, it will flush outdated parameters (present in the config file, but not in the dist file).
You can override this with setKeepOutdatedParams.
Currently, json, ini, yml and yaml files are supported.
For command-line input, json_decode will be used, but strings do not need to be quoted.
It is possible to have a dist file in one format and output a target file in another by concatenating the extensions. This could be use to generate default values in a PHP script, but still save it as another format.
Ex:
<?php
// dist/foo.ini.php
return array('foo' => 'bar');
?>; local/foo.ini
foo=barIf you want to use the default configuration without any custom mapping, you can use the included Composer script:
Each file in path/to/dist/dir will be compiled to path/to/target/dir.
{
"scripts": {
"post-install-cmd": [
"WMC\\Composer\\Utils\\ScriptHandler::updateDirs"
],
"post-update-cmd": [
"WMC\\Composer\\Utils\\ScriptHandler::updateDirs"
]
},
"extra": {
"update-config-dirs": {
"path/to/dist/dir": "path/to/target/dir"
}
}
}For more control, use the FileUpdater directly:
<?php
use Composer\Script\Event;
use WMC\Composer\Utils\ScriptHandler as Base;
class ScriptHandler
{
public static function myHandler(Event $event)
{
$configFile = Base::createConfigFileUpdate($event->getIO());
$configFile->updateFile('database.ini', 'database.ini.dist');
}
}
?>N.B.: If you want to save your dist files along with your targets (For example,
a parameters.yml.dist with the parameters.yml), you will need to use Custom
Handling.
Tested on PHP 5.3+
