jildertmiedema / commander
命令总线实现:命令和领域事件
v0.1.0
2014-08-04 13:45 UTC
Requires
- php: >=5.4.0
Requires (Dev)
- mockery/mockery: ~0.9
- phpunit/phpunit: ~4.0
- silex/silex: ~1.2
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
创建自己的翻译器和解析器
要与其他框架集成,您可以实现自己的 translator
和 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);
示例
运行示例
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