chencha/dispatcher

基于事件的laravel 5请求和命令分发器

2.0.1 2015-09-08 16:53 UTC

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

该类有三个方法,其中只有一个是必需的。这些是

如果定义了这些方法中的每一个,都必须返回一个数组。

例如

/**
 * @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,因为它们不能被序列化。