makaveli / laravel-crudler
Advanced Crudler for Laravel
Installs: 1
Dependents: 1
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/makaveli/laravel-crudler
Requires
- php: ^8.2
- laravel/framework: ^10.10|^11.0|^12.0
- makaveli/laravel-core: ^1.0
- makaveli/laravel-logger: ^1.1
Requires (Dev)
- mockery/mockery: ^1.5
- orchestra/testbench: ^8.0
- phpunit/phpunit: ^10.0
README
Advanced Crudler for Laravel — это модульный фреймворк для упрощения создания CRUD-операций в приложениях на Laravel. Он предоставляет унифицированный подход к настройке слоев: Policy (авторизация), Request (валидация), Resource (форматирование ответа), Repository (чтение данных), Service (мутации данных), Action (бизнес-действия), Controller (обработка запросов) и Router (регистрация маршрутов). Основной принцип — конфигурация через Builder-паттерн и статические методы в config-классе (наследнике CrudlerConfig), что делает код declarative, testable и reusable.
Crudler расширяет базовые компоненты Laravel (e.g. FormRequest, JsonResource, BaseService/BaseRepository), добавляя динамические hooks, маппинг полей (через CrudlerMapper), контексты (CREATE/UPDATE/DELETE) и интеграцию с soft deletes, транзакциями, логгингом (laravel-logger) и моделями (laravel-soft-model-base).
Features
- Builder-based config: Цепочная настройка слоев через builders (e.g.
RequestBuilder::make()->addCreateTag(...)). - DTO-oriented: Все слои используют DTO для передачи config (e.g.
CrudlerRequestDTO,CrudlerServiceDTO). - Modular layers: Независимая настройка для каждого слоя с fallback на дефолты.
- Hooks & Extensions: Pre/post hooks в Action, unique checks в Repository, теги в Request.
- Integration: Автоматическая инъекция DTO в контроллеры через
CrudlerRoute, поддержка пагинации, caching, joins. - Extensibility: Наследуйте
CrudlerConfigдля модульных config (implementsICoreCrudlerс статическими методами какBASE_POLICY_CRUDLER).
Installation
Requirements
- PHP ^8.2
- Laravel ^10.10 | ^11.0 | ^12.0
- Dependencies: makaveli/laravel-logger, makaveli/laravel-soft-model-base, makaveli/laravel-core (устанавливаются автоматически)
Steps
-
Установите пакет через Composer:
composer require makaveli/laravel-crudler -
Провайдер (
CrudlerServiceProvider) регистрируется автоматически (черезextra.laravel.providersв composer.json). -
Опубликуйте конфиг (если нужно кастомизировать, e.g. crudler.php с настройками):
php artisan vendor:publish --tag=crudler-config
Configuration
После установки проверьте config/crudler.php (если опубликован) — там дефолтные настройки (e.g. paths для builders/DTO). Основная config — в ваших модульных классах (e.g. MyModuleCrudler extends CrudlerConfig), где переопределяете статические методы из ICoreCrudler (e.g. BASE_POLICY_CRUDLER, FULL_SERVICE_CRUDLER).
Для моделей используйте SoftModel trait из laravel-soft-model-base для soft deletes/support.
Usage
-
Создайте config-класс: Реализует интерфейс
ICrudlerConfigчерез builders.<?php namespace App\Modules\MyModule\Crudler; use Crudler\Interfaces\ICrudlerConfig; use Crudler\Requests\Builders\RequestBuilder; use Crudler\Requests\DTO\CrudlerRequestDTO; class MyModuleCrudler implements ICrudlerConfig { public static function BASE_REQUEST_CRUDLER(...$args): ?CrudlerRequestDTO { return RequestBuilder::make() ->addCreateTag('create', ['name' => 'required']) ->build(); } // Другие слои: BASE_POLICY_CRUDLER, FULL_SERVICE_CRUDLER и т.д. }
-
Зарегистрируйте роуты: Используйте
CrudlerRouteс fn() => MyModuleCrudler::FULL_CONTROLLER_CRUDLER() для инъекцииCrudlerControllerDTO.use App\Controllers\API\MyModuleController; use App\Modules\MyModule\Crudler\MyModuleCrudler; use Crudler\Routing\CrudlerRoute; CrudlerRoute::post('/items', [MyModuleController::class, 'crudlerCreate', fn() => MyModuleCrudler::FULL_CONTROLLER_CRUDLER()]);
-
Создайте контроллер: Наследуйте от
CrudlerController.<?php namespace App\Controllers\API; use Crudler\Controllers\Core\CrudlerController; class MyModuleController extends CrudlerController { // Методы как crudlerCreate(CrudlerControllerDTO $dto) уже готовы }
-
Вызов в коде: В контроллере crudler-методы автоматически используют DTO для action/resource (e.g. crudlerCreate вызывает action->crudlerCreate и resource->resource).
Подробные примеры в документации слоев ниже.
Layers
Crudler разделён на слои, каждый с собственной документацией (см. docs/ или отдельные файлы в repo):
- Policy: Дополнительная проверка разрешений на действия с моделью (abilities как 'can_view') через
PolicyBuilderиCrudlerPolicyResolver. - Request: Валидация с тегами/контекстами через
RequestBuilderиCrudlerRequest. - Resource: Форматирование JSON через
ResourceBuilderиCrudlerResource. - Repository: Чтение данных (getAll/find/paginate) через
RepositoryBuilderиCrudlerRepository. - Service: Мутации (create/update/delete) через
ServiceBuilderиCrudlerService. - Action: Бизнес-действия с hooks через
ActionBuilderиCrudlerAction. - Controller: Обработка запросов через
ControllerBuilderиCrudlerController. - Router: Регистрация роутов с DTO-инъекцией через
CrudlerRoute.
Каждый слой настраивается в config-классе (e.g. BASE_POLICY_CRUDLER возвращает DTO из builder->build()).
License
MIT License. See LICENSE for details.