patienceman / custom-handler
提供创建单动作处理器的便捷方式。动作处理器的概念是一个单动作控制器,意味着一个唯一的类处理每个动作
Requires
- php: >=8.0.0
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(); } }
贡献
欢迎提交拉取请求。对于重大更改,请首先提交一个问题以讨论您想要更改的内容。
请确保适当地更新测试。