patienceman/custom-handler

提供创建单动作处理器的便捷方式。动作处理器的概念是一个单动作控制器,意味着一个唯一的类处理每个动作

v1.0.0 2023-05-04 12:21 UTC

This package is auto-updated.

Last update: 2024-08-31 00:41:36 UTC


README

提供创建单动作处理器的便捷方式。动作处理器的概念是一个单动作控制器,意味着一个唯一的类处理每个动作

安装

安装此包不需要很多要求,只需在Laravel终端中运行以下命令即可。

composer require patienceman/custom-handler

使用

要开始使用处理器,您需要在自定义目录中运行命令 🎉

php artisan make:handler NewStartupHandler

它将为您创建过滤器文件,就在

    App\Handlers
namespace App\Handlers;

use Patienceman\CustomHandler\Handler;

class NewStartupHandler extends Handler {
    /**
     * Custom execution from Handler Pipeline
     * @return Exception|void
     */
    public function execute() {
        // do whatever action inside handler
    }
}

所以您甚至可以指定处理器的自定义路径,只需在处理器名称前添加即可。让我们再次以当前示例为例。

php artisan make:handler Model/DatabaseHandler

到目前为止一切顺利,让我们看看您如何在控制器、服务或其他任何地方使用处理器。

namespace App\Http\Controllers;

use App\Handlers\NewStartupHandler;
use Patienceman\CustomHandler\CustomHandler;

class TestBuilderController extends Controller {
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index() {
        $handler = CustomHandler::handle(new NewStartupHandler());
    }
}

但不必担心,您可以链式调用任意多个处理器,您需要做的就是继续添加 ->handle(),让我们看看它是如何工作的。

namespace App\Http\Controllers;

use App\Handlers\NewStartupHandler;
use App\Handlers\NewCompanyHandler;
use Patienceman\CustomHandler\CustomHandler;

class TestBuilderController extends Controller {
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index() {
        $handler = CustomHandler::handle(new NewStartupHandler())
                                ->handle(new NewCompanyHandler());
    }
}

现在,一旦您的控制器开始执行,所有的处理器都将运行。

数据交换

可能会有这样的时刻,您需要存储和交换数据,在整个处理器中。此包通过使用 ->collect(array data) 收集数据和使用 ->collection() 获取收集到的数据,提供了一种便捷的方式来做这件事,以下是一个示例。

在我们的 NewStartupHandler

namespace App\Handlers;

use Patienceman\CustomHandler\Handler;
use App\Models\Startup;

class NewStartupHandler extends Handler {
    /**
     * Custom execution from Handler Pipeline
     * @return Exception|void
     */
    public function execute() {
        $startup = Startup::create([ 'name' => "MorganTv" ]);
        $this->collect([ 'startup' => $startup ]);
    }
}

看起来很清晰 🎉,那么让我们看看您如何在任何地方调用收集到的数据,例如在我们的 NewCompanyHandler 类中。

namespace App\Handlers;

use Patienceman\CustomHandler\Handler;

class NewCompanyHandler extends Handler {
    /**
     * Custom execution from Handler Pipeline
     * 
     * @return Exception|void
     */
    public function execute() {
        $startup = $this->collection()->get('startup');
    }
}

🚨 您已经看到了我们使用 ->collection() 函数的地方,这来自Laravel集合,您可以在它们的网站上了解更多关于获取和过滤数据的信息:[Laravel集合可用方法](https://laravel.net.cn/docs/8.x/collections#available-methods)

还有另一种获取收集到的数据的方法,例如当您在处理器外部时,为此您可以在处理器后使用与 ->collection() 相同的功能,看看下面的例子。

namespace App\Http\Controllers;

use App\Handlers\NewStartupHandler;
use App\Handlers\NewCompanyHandler;
use Patienceman\CustomHandler\CustomHandler;

class TestBuilderController extends Controller {
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index() {
        $handler = CustomHandler::handle(new NewStartupHandler())
                                ->handle(new NewCompanyHandler())
                                ->collection()
                                ->get('startup') // or ->get(), ->filter() ->sort();
    }
}

贡献

欢迎提交拉取请求。对于重大更改,请首先提交一个问题以讨论您想要更改的内容。

请确保适当地更新测试。

与我联系

Linkedin Github Instagram Twitter