drkwolf / laravel-handler
Laravel package, module helper, structured package
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: 2025-04-29 01:00:40 UTC
README
Laravel handler enable you to structure you code as packages
- install :
composer require drkwolf/laravel-handler:dev-master
structure
- app
- packages
- package_name
- Entities
- Events
- Presenters
- Controllers
- tests
- package_name
- packages
$presenter = new ServicePresenter(); return ServicerHandler::resolve('create', [], $presenter, ...)
the presenter transform the data $JsonResponse$ (Laravel Resource)
Presenter example
<?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, ]; } }
hanlder example
<?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 ] ]; } }
Merging hanlder example
$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 ]);