=========
This package is able run domain commands easily. Commands are used to separate domain logic from your php framework.
This package is based on Laravel Commander build by JeffreyWay.
Install through Composer.
"require": {
"jildertmiedema/commander": "~0.1"
}
- It creates a command object. The command object is data transfer object between the framework/controller and the domain logic.
- It will fill the command object with the request data (For example
$_GET
,$_POST
,$app['request']->query->all()
). - It will try to find a validator class, when it's found it will validate the input.
- If decorators have been set it will execute the decorators. (For example a sanitizer).
- It will find and execute the handler for the command.
This package can easily be used in Silex.
It will try to find a handler(required) and a validator (not required) from application container using the following convention.
//without namespace "ExampleCommand"
$app[$className . '.handler']; // exampleCommand.handler
$app[$className . '.validator']; // exampleCommand.validator
//with namespace "Acme\Domain\ExampleCommand"
$app[$className . '.handler']; // acme.domain.exampleCommand.handler
$app[$className . '.validator']; // acme.domain.exampleCommand.validator
Usage:
$app->register(new JildertMiedema\Commander\Silex\CommanderServiceProvider());
Example:
class TestCommand {
public $test;
public $extra;
public function __construct($test, $extra)
{
$this->test = $test;
$this->extra = $extra;
}
}
class TestCommandHandler implements CommandHandler
{
public function handle($command)
{
//handle the command
}
}
$app['testCommand.handler'] = $app->share(function() use ($app) {
return new TestCommandHandler();
});
$app->get('/', function() use ($app) {
return $app['commander.executor']->execute('TestCommand');
});
For a full example see silex.php
For usage in controllers see CommanderController.php
To use commander in another framework you can use this code:
use JildertMiedema\Commander\Manager;
use JildertMiedema\Commander\Vanilla\Executor;
$manager = new Manager();
$executor = new Executor($manager);
echo $executor->execute('TestCommand', null, ['TestSanitizer']);
The vanilla php solution does not support out-of-the-box dependency injection, therefore you need to implement a translator and a resolver.
An example vanilla.php
For integration with a another framework you can implement your own translator
and resolver
.
$translator = new YourOwnCommandTranslator; // Must implement `JildertMiedema\Commander\CommandTranslatorInterface`
$resolver = new YourOwnResolver; // Must implement `JildertMiedema\Commander\ResolverInterface`
$defaultCommandBus = new DefaultCommandBus($translator, $resolver);
$commandBus = new ValidationCommandBus($defaultCommandBus, $translator, $resolver);
$manager = new Manager($commandBus);
Run the examples
cd YOUR_PACKAGE_DIR
cd examples
php -S localhost:8000
Visit:
http://localhost:8000/silex.php?test=test%20%20%20&extra=123
http://localhost:8000/silex.php/sanitizer?test=test%20%20%20&extra=123
http://localhost:8000/silex.php/controller?test=test%20%20%20&extra=123
http://localhost:8000/vanilla.php?test=test%20%20%20&extra=123