PHPackages                             eckinox/installer-plugin - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. eckinox/installer-plugin

ActiveComposer-plugin[Utility &amp; Helpers](/categories/utility)

eckinox/installer-plugin
========================

A simple Composer plugin to install metapackages with extra files and configurations.

2.0.2(3y ago)011.4k↓50%1MITPHP

Since Aug 20Pushed 3y ago2 watchersCompare

[ Source](https://github.com/eckinox/eckinox-installer-plugin)[ Packagist](https://packagist.org/packages/eckinox/installer-plugin)[ RSS](/packages/eckinox-installer-plugin/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (10)Dependencies (4)Versions (14)Used By (1)

Composer installer plugin handling file replication
===================================================

[](#composer-installer-plugin-handling-file-replication)

[![CI](https://github.com/eckinox/eckinox-installer-plugin/workflows/CI/badge.svg)](https://github.com/eckinox/eckinox-installer-plugin/workflows/CI/badge.svg)

A simple Composer plugin to install (meta)packages with extra files and configurations.

Usage
-----

[](#usage)

To get started, simply require this plugin in your project using:

```
composer require --dev eckinox/installer-plugin
```

Once that's done, you can require any Composer package with the `eckinox-metapackage` type.

### Creating `eckinox-metapackage` packages

[](#creating-eckinox-metapackage-packages)

Eckinox metapackages are the same as all regular packages, with one exception: they can include a `replicate` directory at their root.

Whenever a package of that type is installed, every file and directory in the package's `replicate` directory will be replicated as-is in the project's directory.

If a directory in the `replicate` directory already exists in the project, its files will simply be appended to the existing directory. The original won't be deleted.
However, existing files in the project *will* be overwritten if they have the same name as another file in the package's `replicate` directory.

#### Adding custom logic via Handlers

[](#adding-custom-logic-via-handlers)

If you need to add extra logic and processing during the replication process, you can create an handler class in your package.

Handler classes extend the `Eckinox\Composer\HandlerInterface`, and must be declared in the package's `composer.json` file as such:

```
    ...
    "extra": {
        "class": "Eckinox\\PackageName\\YourHandler"
    },
    ...
```

Your handler class must define the following methods:

- `postFileCreationCallback`: Defines what happens when after a file has first been created in the root project.
- `handleExistingFile`: Defines what happens when a file to replicate already exists in the root project.

Here is a example of a very basic handler class that simply renames a `rename-me.txt` file to `renamed.txt` when it is first replicated in the main project.

```
