bright-components/responders

此包已被废弃,不再维护。未建议替代包。

Laravel项目的响应器实现

2.0.0 2019-03-29 03:06 UTC

This package is auto-updated.

Last update: 2019-03-31 20:47:14 UTC


README

Laravel项目的响应器实现。

Latest Version on Packagist Build Status Quality Score Total Downloads

Bright Components

免责声明

BrightComponents命名空间下的包基本上是我避免在所有项目中复制粘贴我喜欢的基本功能的一种方式。这里没有革命性的东西,只是为表单请求、控制器、自定义规则、服务等添加了一些额外的功能。

响应器是一种使你的控制器变瘦并保持相关响应代码在一个地方的好方法。这个一般想法基于ADR - Action Domain Responder中的“R”,由Paul M. Jones提出。

例如,在你的控制器中

namespace App\Http\Controllers;

use App\MyDatasource;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Responders\Post\IndexResponder;

class PostIndex implements Controller
{
    /**
     * The Responder.
     *
     * @var \App\Http\Responders\Post\IndexResponder
     */
    private $responder;

    /**
     * Construct a new PostIndex Controller.
     *
     * @param \App\Http\Responders\Post\IndexResponder $responder
     */
    public function __construct(Responder $responder)
    {
        $this->responder = $responder;
    }

    public function index(Request $request)
    {
        $data = MyDatasource::getSomeData($request);

        return $this->responder->respond($request, $data);
    }
}

然后在你的响应器中

namespace App\Http\Responders\Post;

use Illuminate\Http\Request;
use BrightComponents\Responder\Responder;

class IndexResponder extends Responder
{
    /**
     * Send a response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Illuminate\Database\Eloquent\Model|\Illuminate\Database\Eloquent\Collection|array|null  $data
     *
     * @return mixed
     */
    public function respond(Request $request, $data = null)
    {
        if ($request->isApi()) {
            // return json
        }

        return $this->view('posts.index', ['posts' => $data]);
    }
}

与传统“在控制器动作中处理响应”相比,其优势在于它带来的清晰性、狭窄的类责任、控制器中的依赖项更少以及整体组织。当与单动作控制器一起使用时,你真的可以清理你的控制器并为你的代码库带来很多清晰性。

安装

您可以通过composer安装此包

composer require bright-components/responders

注意:在版本1.0发布之前,可能会在小版本之间添加主要功能和错误修复。为了保持稳定性,我建议使用"^0.1.0"形式的限制。这将采取以下形式

composer require "bright-components/responders:^0.1.0"

Laravel版本>5.6.0将自动识别并注册服务提供程序。

如果您正在使用Laravel的较旧版本,请将包服务提供程序添加到您的config/app.php文件中的'providers'数组中

'providers' => [
    //...
    BrightComponents\Services\ResponderServiceProvider::class,
    //...
];

然后,运行

php artisan vendor:publish

并选择BrightComponents/Responders选项。

这将把包配置(responders.php)复制到您的'config'文件夹中。在这里,您可以设置您的响应器类的根命名空间

return [

    /*
    |--------------------------------------------------------------------------
    | Namespace
    |--------------------------------------------------------------------------
    |
    | Set the namespace for the Responders.
    |
 */

    'namespace' => 'Http\\Responders'
];

用法

要开始使用BrightComponents/Responders,只需按照上面的说明操作,然后根据需要生成您的响应器类。例如,要为帖子生成IndexResponder,请在上面的示例中,在您的终端中输入以下命令

php artisan adr:responder Post\\IndexResponder

然后,将响应器作为依赖项添加到您的控制器中,并调用respond方法。此方法期望一个Illuminate\Http\Request实例和一个可选的$data对象

public function index(Request $request)
{
    $data = MyDatasource::getSomeData();

    return $this->responder->respond($request, $data)
}

您的响应器扩展的抽象响应器有一些用于处理响应的“辅助”方法

    protected function view($view, $data = [], $mergeData = []);

    protected function redirect(string $path = null, $status = 302, array $headers = [], $secure = null);

    protected function flash($message, array $options = []); //uses DevMarketer/LaraFlash

    protected function json($content = '', $status = 500, array $headers = []);

测试

composer test

变更日志

请参阅CHANGELOG获取有关最近更改的更多信息。

贡献

请参阅CONTRIBUTING获取详细信息。

安全

如果您发现任何安全相关的问题,请发送电子邮件至 clay@phpstage.com 而不是使用问题跟踪器。

路线图

我们计划很快开始工作于灵活性和配置,以及发布一个与框架无关的包版本。

致谢

许可证

MIT 许可证 (MIT)。请参阅 许可证文件 以获取更多信息。