jildertmiedema/commander

命令总线实现:命令和领域事件

v0.1.0 2014-08-04 13:45 UTC

This package is auto-updated.

Last update: 2024-09-11 20:01:56 UTC


README

=========

此包可以轻松运行领域命令。命令用于将领域逻辑与您的PHP框架分离。

此包基于 Laravel Commander,由 JeffreyWay 构建。

安装

通过Composer安装。

"require": {
    "jildertmiedema/commander": "~0.1"
}

它做什么

  • 它创建一个命令对象。命令对象是框架/控制器与领域逻辑之间的 数据传输对象
  • 它将填充命令对象中的请求数据(例如 $_GET$_POST$app['request']->query->all())。
  • 它将尝试找到一个验证器类,如果找到了,它将验证输入。
  • 如果设置了装饰器,它将执行装饰器。(例如一个消毒剂)。
  • 它将找到并执行命令的处理程序。

集成到框架中

Silex

此包可以轻松地在 Silex 中使用。

它将尝试从应用程序容器中根据以下约定找到处理程序(必需)和验证器(非必需)。

//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

用法

$app->register(new JildertMiedema\Commander\Silex\CommanderServiceProvider());

示例

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');
});

有关完整示例,请参阅 silex.php

有关在控制器中的使用,请参阅 CommanderController.php

纯PHP

要在其他框架中使用Commander,可以使用此代码

use JildertMiedema\Commander\Manager;
use JildertMiedema\Commander\Vanilla\Executor;

$manager = new Manager();
$executor = new Executor($manager);

echo $executor->execute('TestCommand', null, ['TestSanitizer']);

纯PHP解决方案不支持开箱即用的依赖注入,因此您需要实现翻译器和解析器。

示例 vanilla.php

创建自己的翻译器和解析器

要与其他框架集成,您可以实现自己的 translatorresolver

$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);

示例

运行示例

cd YOUR_PACKAGE_DIR
cd examples
php -S localhost:8000

访问

https://:8000/silex.php?test=test%20%20%20&extra=123
https://:8000/silex.php/sanitizer?test=test%20%20%20&extra=123
https://:8000/silex.php/controller?test=test%20%20%20&extra=123
https://:8000/vanilla.php?test=test%20%20%20&extra=123