chencha / dispatcher
基于事件的laravel 5请求和命令分发器
2.0.1
2015-09-08 16:53 UTC
Requires
- laracasts/commander: ~1.4
This package is not auto-updated.
Last update: 2024-09-17 03:58:38 UTC
README
#基于事件的请求分发
此模块提供了一种将请求处理委托给多个监听器的方法。
这可以使您的控制器更加瘦,代码更加DRY和可测试
可以在这里找到使用此模块的示例安装
此模块需要laravel安装。
##安装
您可以使用composer进行安装
composer require chencha/dispatcher
##基本用法
假设您的应用程序使用了PSR-4自动加载
##目录结构
.
└── Sample
├── Commands
│ └── SaveUser.php
├── Handlers
│ ├── CommandHandler.php
│ └── RequestHandler.php
├── Models
│ └── Transactions.php
└── Requests
└── RetreiveUser.php
##处理器
处理器是注册所有将响应请求或命令的类的类。它们必须扩展
Chencha\Dispatcher\EventSubscriber;
处理器类必须向父构造函数提供它将处理的命令或请求的位置。
例如
function __construct()
{
$path = "Sample.Commands";
parent::__construct($path);
}
该类有三个方法,其中只有一个是必需的。这些是
- beforeListeners
- duringListeners (必需)
- afterListeners
- queuedListeners (在请求周期外调用。见 https://laravel.net.cn/docs/4.2/queues)
如果定义了这些方法中的每一个,都必须返回一个数组。
例如
/**
* @return array
*/
function duringListeners()
{
return [
Transactions::class
];
}
##订阅处理器
为了框架了解您已注册的类,您需要注册您的处理器。
这是引导工作,应该在app/start/global.php文件或您通常注册监听器的任何地方完成。
示例声明
Event::subscribe(new \Sample\Handlers\CommandHandler());
##用法
在您的控制器中使用特性
use \Chencha\Dispatcher\RequestDispatcher;
现在运行请求
function getSaveuser()
{
$command = new \Sample\Commands\SaveUser(rand(1, 5));
$this->runRequest($command);
return "Success";
}
这样,将调用在命令处理器中注册的所有类。
由于对象通常是通过引用传递的,因此更改将直接应用于命令对象。
这在需要响应的请求中很有用
例如
function getUser()
{
$request = new \Sample\Requests\RetreiveUser(rand(1, 5));
$this->runRequest($request);
return $request->response;
}
这样,您可以填充如 response 公共属性,为响应提供所有必要值。
##注意事项
###嵌套级别
如果您注册了大量的类,您可能会遇到这个错误
PHP Error: Maximum function nesting level of '100' reached, aborting
这是因为laravel事件分发器的工作方式。
要解决这个问题,只需将以下行添加到
xdebug.max_nesting_level = 200
/etc/php5/fpm/conf.d/20-xdebug.ini
最大嵌套级别越高,您可以注册的类就越多。
###闭包序列化
您的对象应尽可能简单,最好是原生PHP类型。
无论如何都要避免 closures,因为它们不能被序列化。