vasichmen / laravel-handbooks
Package Handbooks
Installs: 1
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/vasichmen/laravel-handbooks
Requires
- php: ^8.4
- ext-json: *
- laravel/framework: ^12.0
- vasichmen/laravel-foundation: ^2.0
This package is auto-updated.
Last update: 2025-11-07 19:40:51 UTC
README
- установить пакет
composer require vasichmen/laravel-handbooks
- подключить
\Laravel\Handbooks\LaravelHandbooksServiceProvider::classвconfig\app.php - опубликовать конфиг
php artisan vendor:publish --provider="Laravel\Handbooks\LaravelHandbooksServiceProvider"
-
заполнить заготовку конфига
handbooks.php. -
Пример конфига:
[
'route_prefix' => env('HANDBOOKS_ROUTE_PREFIX', ''),
'global_middleware' => ['user-auth', 'local-auth'],
'defaults' => [
'middleware' => [
'create' => ['can-create'], //мидлвары для создания по умолчанию, например can:manage_handbooks
'update' => ['can-update'], //мидлвары для обновления по умолчанию, например can:manage_handbooks
'delete' => ['can-delete'], //мидлвары для удаления по умолчанию, например can:manage_handbooks
'view' => ['can-view'], //мидлвары для просмотра по умолчанию, например can:manage_handbooks
],
],
'dynamic' => [
'model_base_namespace' => '\\App\\Models\\',
'repository_base_namespace' => '\\App\\Repositories\\',
'default_select' => ['id', 'name'],
'default_with' => [],
'default_searchable_fields' => ['name'],
'custom' => [
//модели, которые находятся в других пространствах имен или нужны кастомные настройки
// 'model-code' => [
// 'model' => ModelClass::class,
// 'resource' => ModelResourceClass::class,
// 'repository' => ModelRepositoryClass::class,
// 'select' => ['id','name'],//массив полей, которые надо доставать для short-лист. По умолчанию id,name
// 'with' => [], //массив отношений, которые надо доставать для short-лист. По умолчанию пустой
// 'searchable_fields' => [], //массив полей, по которым возможен поиск
// ],
]
],
'crud' => [
'functional-area' => [
'repository' => \App\Repositories\FunctionalAreaRepository::class,
'resource' => \App\Http\Resources\FunctionalAreaResource::class,
'create_request' => \App\Http\Requests\Handbook\Create\CreateFunctionalAreaRequest::class,
'update_request' => \App\Http\Requests\Handbook\Update\UpdateFunctionalAreaRequest::class,
'create_dto' => \App\DTO\Request\Handbook\FunctionalAreaHandbookDTO::class,
'update_dto' => \App\DTO\Request\Handbook\FunctionalAreaHandbookDTO::class,
'searchable_fields'=>['name'],
'with'=>['detail'=>['system', 'architectManagers'],'list'=>['system']]
]
],
'enums'=>[
ComponentTypeEnum::class,
MicroserviceCodeEnum::class,
]
]
- Пример реквеста создания:
class CreateFunctionalAreaRequest extends AbstractRequest { protected ?string $dtoClassName = FunctionalAreaHandbookDTO::class; public function rules() { return [ 'name' => ['required', 'string', 'max:255', new Unique(FunctionalArea::class, 'name')], 'architect_managers' => ['array', 'sometimes'], 'architect_managers.*' => ['uuid', new Exists(User::class, 'id')], 'corp_architects' => ['array', 'sometimes'], 'corp_architects.*' => ['uuid', new Exists(User::class, 'id')], ]; } }
- Пример реквеста обновления:
class UpdateFunctionalAreaRequest extends CreateFunctionalAreaRequest { protected ?string $dtoClassName = FunctionalAreaHandbookDTO::class; public function rules() { return [ ...parent::rules(), 'name' => [ 'sometimes', 'string', 'max:255', (new Unique(FunctionalArea::class, 'name'))->ignore($this->getRouteParameter('handbookId')) ], ]; } }
- Если в проекте используются кастомные связи BelongsToMany, то такие связи могут реализовать интерфейс ProvidesUniqueRelatedKeys.