PHPackages                             devster/ika - 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. devster/ika

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

devster/ika
===========

PHP library for command/transaction design pattern

37PHP

Since Nov 16Pushed 13y ago1 watchersCompare

[ Source](https://github.com/devster/ika)[ Packagist](https://packagist.org/packages/devster/ika)[ RSS](/packages/devster-ika/feed)WikiDiscussions master Synced today

READMEChangelogDependenciesVersions (1)Used By (0)

Ika
===

[](#ika)

PHP 5.3 library to use command/transaction design pattern

Concept
-------

[](#concept)

Ika relies on doing the same as SQL transations but with eclectic actions, and if an error occured roll back these actions.

An example of application will be an installer, that performs multiple actions like create folder, duplicate files, run SQL queries etc and if one of these actions doesn't work, clean previous actions.

How it works
------------

[](#how-it-works)

You create several commands, each one has an up action and a down action. When you will start the transaction, all up action of your commands will be run, in the order they were added.

If an error occurred, you can roll back. It will run all down action of all succeeded commands in reverse. That's it. Simple.

Installation
------------

[](#installation)

### Old school

[](#old-school)

Download the latest version of Ika and add the `Ika` namespace to your PSR-0 autoloading system, or simply require the `src/autoload.php`

### Composer

[](#composer)

Just create a composer.json file and run the php composer.phar install command to install it:

```
{
    "require": {
        "devster/ika": ">=1.0.*"
    }
}
```

Usage
-----

[](#usage)

### Basic

[](#basic)

Here a small example of basic usage with thin commands:

```
use Ika\Transaction;

$t = new Transaction;

// Register new command to the transaction and set it up
$t->register('new_dir')->setUp(function($prev, $command) {
    // the `command` var is the new command object you just registered
    // $prev is the return of the previous hook/command
    // Here it is NULL because there is nothing before
    mkdir('test');
})->setDown(function($prev, $command) {
    rmdir('test');
});

// add a second command, this library is useless for just one command :)
$t->register('create_file')->setUp(function() {
    // some code that throw an exception
    throw new Exception('Error !');
})->setDown(function(){});

// Here we go! We run the transaction
try {
    $result = $t->begin();
} catch(TransactionException $e) {
    // Execute just the down action of the first command `rmdir('test')`
    $t->rollback();
}
```

### With Bigger commands

[](#with-bigger-commands)

If your commands are more complex you can extend the `Ika\Command`:

```
use Ika\Command;

class MyCommand extends Command
{
    public function getName()
    {
        return 'my_command';
    }

    public function isEnabled()
    {
        // your code that decide if this command
        // must be run when the transaction will be executed
        // By default return true

        return true;
    }

    public function up($prev)
    {
        mkdir('test');
    }

    public function down($prev)
    {
        rmdir(test);
    }
}
```

```
$t = new Transaction;

// add your new fresh command
$t->add(new MyCommand);
// add a bunch of commands
//$t->addCommands(array(new Command, ...));

try {
    $t->begin();
} catch(TransactionException $e) {
    $t->rollback();
}
```

### Hooks

[](#hooks)

There is a hooks system integrated in Ika. here's the list:

```
- pre      // execute before any actions up or down
- post     // executed after any actions up or down
- preUp    // executed before up actions
- postUp   // executed after up actions
- preDown  // executed before down actions
- postDown // executed after down actions

```

```
$t = new Transaction;

$t->addHook('preUp', function($prev, $command) {
    // $prev is the return of the previous hook/command
    // $command is the current command executed
    echo 'Execution of '.$command->getName();
});
```

If your hooks are more complex you can extends `Ika\Transaction`:

```
use Ika\Transaction;

class MyTransaction extends Transaction
{
    public function initialize()
    {
        $this->addHook('pre', function($prev, $command, $direction){
            echo 'Execution of '.$direction.' '.$command->getName();
        });

        $this->addHook('postDown', function(){});

        // etc
    }
}
```

### Tricks

[](#tricks)

You can start the transaction at the command you want:

```
$t->begin('my_command');
```

You can start the rollback at the command you want:

```
$t->rollback('my_command');
```

About
-----

[](#about)

### Requirements

[](#requirements)

- Any flavor of PHP 5.3 should do

Author
------

[](#author)

- Jeremy Perret

### License

[](#license)

Ika is licensed under the MIT License - see the LICENSE file for details

###  Health Score

21

—

LowBetter than 18% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity8

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity41

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/1135083?v=4)[Jeremy Perret](/maintainers/devster)[@devster](https://github.com/devster)

---

Top Contributors

[![devster](https://avatars.githubusercontent.com/u/1135083?v=4)](https://github.com/devster "devster (7 commits)")

### Embed Badge

![Health badge](/badges/devster-ika/health.svg)

```
[![Health](https://phpackages.com/badges/devster-ika/health.svg)](https://phpackages.com/packages/devster-ika)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
