naucon / command
描述文本
Requires
- php: >=5.5.0
- naucon/processor: ~1.0
- naucon/registry: ~1.0
Requires (Dev)
- phpunit/phpunit: 4.8.*
This package is auto-updated.
Last update: 2024-08-29 04:48:27 UTC
README
关于
此包提供了一个通用的命令模式来执行操作或任务。目标是把大型的业务逻辑分割成更小的操作/任务,这些操作/任务松散耦合、易于阅读、易于维护且易于替换。
兼容性
- PHP5.5+
安装
使用composer安装最新版本
composer require naucon/command
使用方法
创建CommandManager实例
$manager = new CommandManager();
将命令注册到管理实例
$manager->register('foo', new FooAction());
$manager->register('bar', new BarAction());
执行命令
$request = new FooRequest();
$response = $manager->execute($request)
创建请求
class MyRequest
{
}
创建操作(命令)
use Naucon\Command\CommandInterface;
class MyAction implements CommandInterface
{
/**
* @param mixed $request
* @return mixed response
*/
public function execute($request)
{
// do something ....
return true;
}
/**
*
* @param mixed $request
* @return bool returns true if request is support, else false
*/
public function support($request)
{
return $model instanceof MyRequest;
}
}
数据应通过Request
传递到Action
。
class PowerOnRequest
{
/**
* @var Light
*/
protected $light;
/**
* Constructor
*
* @param Light $light
*/
public function __construct(Light $light)
{
$this->light = $light;
}
/**
* @return Light
*/
public function getLight()
{
return $this->light;
}
}
为了在Action
中执行Action
,类需要CommandManager
的实例。为了注入CommandManager
,将CommandManagerAwareInterface
实现到Action
中。该接口通过调用setCommandManager()
触发CommandHydrator
将CommandManager
注入到Action
中。可以使用CommandManagerAwareTrait
来添加属性和设置器。
class MyAction implements CommandInterface, CommandManagerAwareInterface
{
use CommandManagerAwareTrait;
...
public function execute($request)
{
$request = new MySubRequest();
$response = $this->commandManager->execute($request);
return $response;
}
要将其他类型的数据注入到操作中,可以向CommandHydrator
添加自定义处理器。处理器必须实现ProcessorInterface
。通过调用CustomerManager::addProcessor()
添加自定义处理器。第二个参数是可选的$priority
(默认值为0)。
$manager = new CommandManager();
$manager->addProcessor(new MyProcessor());
在某些罕见情况下,如果有嵌套的子请求,可能有必要中断工作流程并立即发送HTTP响应或重定向(通常不推荐)。因此,可以在操作(命令)中抛出实现ResponseInterface
的LogicException
。
use Naucon\Command\CommandInterface;
use Naucon\Command\Response\HttpRedirect;
class MyAction implements CommandInterface
{
/**
* @param mixed $request
* @return mixed response
*/
public function execute($request)
{
// do something ....
throw new HttpRedirect($url, $statusCode, $headers);
// or
throw new HttpResponse($content, $statusCode, $headers);
}
...
示例
启动内置的web服务器以查看示例操作
cd examples
php -S 127.0.0.1:3000
在浏览器中打开URL
http://127.0.0.1:3000/index.html
致谢
此实现深受payum支付处理库的启发。模块化和解耦的架构不仅可以用于处理支付,在许多其他用例中也非常有用。
许可证
MIT许可证(MIT)
版权所有 (c) 2015 Sven Sanzenbacher
特此授予任何获得此软件及其相关文档副本(“软件”)的人免费权限,在软件不受限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、转授和/或出售软件副本,以及允许向提供软件的人做上述事项,前提是
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定目的和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论此类索赔、损害或其他责任是基于合同、侵权或其他方式,是否与软件或软件的使用或其他交易有关。