drkwolf / laravel-handler
Laravel 包,模块助手,结构化包
dev-master
2019-04-30 13:19 UTC
Requires
- php: >=7.1.3
- illuminate/database: ~5.2
- illuminate/http: ~5.2
- illuminate/support: ~5.2
- illuminate/validation: ~5.2
- spatie/laravel-medialibrary: ^7.0.0
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-29 05:21:37 UTC
README
Laravel handler 允许您将代码结构化成包
- 安装
composer require drkwolf/laravel-handler:dev-master
结构化
- 应用
- 包
- 包名
- 实体
- 事件
- 演示者
- 控制器
- 测试
- 包名
- 包
$presenter = new ServicePresenter(); return ServicerHandler::resolve('create', [], $presenter, ...)
演示者转换数据(Laravel 资源)
演示者示例
<?php namespace App\Packages\Package\Presenter; use App\Packages\Package\Presenter\PresenterAbstract; class DefaultPresenter extends PresenterAbstract { public function successResponse($params = []) { return $this->resource; } } class InvoicePresenter extends OrmPresenterAbstract { public function successResponse($params = []) { switch ($this->action) { case 'fetchAll': $this->insertAction('invoices', $this->getCollection()); $this->insertAction('invoiceItems', new InvoiceItemCollection($this->items)); break; } return [ 'actions' => $this->getOrmActions() ]; } private function getData() { return [ 'id' => $this->id, ]; } }
handler 示例
<?php namespace App\Packages\Service; use App\Packages\Package\HandlerAbstract; use App\Models\Service; use App\Packages\Service\Events\ServiceMembershipAttachEvent; use App\Packages\Service\Events\ServiceMembershipDetachEvent; class ServiceMembershipHandler extends HandlerAbstract { public $model; public function __construct($presenter, array $data, $model) { parent::__construct($presenter, $data); $method = 'findOrFail' ; $this->service = $this->getModel($service, Service::class, $method); } private createAction($params = []) { // do something // return data for presenter return $this->model; } protected function dataFields($action = null) { return [ 'providersIds' ]; } public function rules($action = null, $params = []) { return [ 'providersIds' => [ 'required', 'array|min:1', $this->validateProvidersIds ] ]; } }
合并 handler 示例
$actions = collect(); \DB::beginTransaction(); try { /* |--------------------------------------------------------------------- | Detach from Office |--------------------------------------------------------------------- */ $presenter = new OfficeMembershipPresenter(); $handler = new OfficeMembershipHandler( $presenter, $customers_ids, $office_id, RolesTypes::CUSTOMER ); $handler->execute('detach'); $action = Arr::get($presenter->responseOrFail(), 'actions'); $actions = $actions->concat($action); \DB::commit(); } catch (\Illuminate\Validation\ValidationException $e) { \DB::rollback(); throw $e; } return response()->json([ 'actions' => $actions ]);