khazhinov / laravel-lighty
A set of tools for quickly creating a CRUD REST API
Installs: 5 658
Dependents: 2
Suggesters: 0
Security: 0
Stars: 3
Watchers: 1
Forks: 2
Open Issues: 0
Requires
- php: ^8.1
- ext-exif: *
- ext-fileinfo: *
- ext-json: *
- ext-sodium: *
- illuminate/bus: ^11.0
- illuminate/config: ^11.0
- illuminate/console: ^11.0
- illuminate/database: ^11.0
- illuminate/http: ^11.0
- illuminate/pipeline: ^11.0
- illuminate/support: ^11.0
- khazhinov/laravel-fly-docs: ^11.0
- khazhinov/php-support: ^1.1
- maatwebsite/excel: ^3.1
- psr/simple-cache: ^3.0
- spatie/data-transfer-object: ^3.8
- symfony/console: ^7.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.64
- laravel/framework: ^11.0
- phpstan/extension-installer: ^1.4
- phpstan/phpstan-symfony: ^2.0
- dev-main
- 11.1.2
- 11.1.1
- 11.1.0
- 11.0.x-dev
- 11.0.8
- 11.0.7
- 11.0.6
- 11.0.5
- 11.0.4
- 11.0.3
- 11.0.2
- 11.0.1
- 11.0.0
- 10.0.2
- 10.0.1
- 10.0.0
- 9.13
- 9.12
- 9.11
- 9.10
- 9.9
- 9.8
- 9.7
- 9.6
- 9.5
- 9.4
- 9.3
- 9.2
- 9.1
- 1.9.7
- 1.9.6
- 1.9.5
- 1.9.4
- 1.9.3
- 1.9.2
- 1.9.1
- 1.9
- 1.8.5
- 1.8.4
- 1.8.3
- 1.8.2
- 1.8.1
- 1.8
- 1.7.18
- 1.7.17
- 1.7.16
- 1.7.15
- 1.7.14
- 1.7.13
- 1.7.12
- 1.7.11
- 1.7.10
- 1.7.9
- 1.7.8
- 1.7.7
- 1.7.6
- 1.7.5
- 1.7.4
- 1.7.3
- 1.7.2
- 1.7.1
- 1.7.0
- 1.6.10
- 1.6.9
- 1.6.8
- 1.6.7
- 1.6.6
- 1.6.5
- 1.6.4
- 1.6.3
- 1.6.2
- 1.6.1
- 1.6
- 1.5
- 1.4
- 1.3
- 1.2
- 1.1
- 1.0
This package is auto-updated.
Last update: 2025-02-24 10:37:14 UTC
README
Laravel Lighty ⚡️
Набор инструментов для быстрого создания CRUD REST API
Описание
Данная библиотека предоставляет набор инструментов для быстрого создания REST API для базовых CRUD операций над сущностями.
Установка
Для установки данной библиотеки требуется использование Composer (для Laravel 11+):
composer require "khazhinov/laravel-lighty:^11.1"
При необходимости опубликуйте файл конфигурации:
php artisan vendor:publish --provider="Khazhinov\LaravelLighty\LaravelLightyServiceProvider" --tag="config"
И шаблон для экспорта в XSLX:
php artisan vendor:publish --provider="Khazhinov\LaravelLighty\LaravelLightyServiceProvider" --tag="views"
Обработчик ошибок
Библиотека предоставляет базовый класс обработчика ошибок, который будет форматировать ответ от сервера в соответствии с принятой структурой данных.
Для внедрения обработчика унаследуйте класс App\Exceptions\Handler
(app/Exception/Handler.php) от Khazhinov\LaravelLighty\Exceptions\ExceptionHandler
:
<?php namespace App\Exceptions; use Illuminate\Auth\AuthenticationException; use Illuminate\Foundation\Configuration\Exceptions as BaseExceptions; use Illuminate\Http\Request; use Illuminate\Support\Facades\View; //use Sentry\Laravel\Integration; use Khazhinov\LaravelLighty\Exceptions\JsonExceptionHandler; use Throwable; class ExceptionHandler extends JsonExceptionHandler { public int $json_flags = JSON_UNESCAPED_SLASHES ^ JSON_UNESCAPED_UNICODE ^ JSON_THROW_ON_ERROR; public function __invoke(BaseExceptions $exceptions): BaseExceptions { $exceptions->renderable( fn(Throwable $exception, ?Request $request = null) => $this->jsonRender($request, $exception) ); return $exceptions; } protected function reportSentry(BaseExceptions $exceptions): void { // $exceptions->reportable( // fn (Throwable $e) => Integration::captureUnhandledException($e) // ); } protected function registerErrorViewPaths(): void { View::replaceNamespace( 'errors', collect(config('view.paths')) ->map(fn (string $path) => "$path/errors") ->push($this->vendorViews()) ->all() ); } protected function vendorViews(): string { return __DIR__ . '/../../vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/views'; } }
Использование
Данная библиотека предоставляет набор Artisan команд для быстрой генерации всех необходимых при создании REST API классов.
Просто используйте:
php artisan lighty:generator TestEntity v1.0 --migration
В результате выполнения данной команды будет сгенерирована следующая структура файлов:
Путь к файлу | Назначение |
---|---|
app/Http/Controllers/Api/V1_0/TestEntity/TestEntityCRUDController.php | Базовый CRUD контроллер |
app/Http/Requests/TestEntity/TestEntityStoreRequest.php | Класс запроса для проверки данных метода создания сущности |
app/Http/Requests/TestEntity/TestEntityUpdateRequest.php | Класс запроса для проверки данных метода изменения сущности |
app/Http/Resources/TestEntity/TestEntityResource.php | Класс ресурса сущности |
app/Http/Resources/TestEntity/TestEntityCollection.php | Класс ресурса коллекции сущностей |
app/Models/TestEntity.php | Модель сущности |
database/migrations/TIMESTAMP_create_test_entities_table.php | Файл миграции |
Также в терминал будет выведена информация, необходимая для добавления в роутер:
#/api/v1.0/testEntities Route::group([ "namespace" => "TestEntity", "prefix" => "/testEntities", "as" => "test_entities.", ], static function () { Route::get("/validations/{method?}", "TestEntityCRUDController@getValidations")->name("validations"); Route::get("/", "TestEntityCRUDController@index")->name("index"); Route::post("/search", "TestEntityCRUDController@index")->name("search"); Route::post("/setPosition", "TestEntityCRUDController@setPosition")->name("set-position"); Route::post("/", "TestEntityCRUDController@store")->name("store"); Route::delete("/", "TestEntityCRUDController@bulkDestroy")->name("bulk-destroy"); #/api/v1.0/testEntities/:key Route::group([ "prefix" => "/{key}", ], static function () { Route::get("/", "TestEntityCRUDController@show")->name("show"); Route::put("/", "TestEntityCRUDController@update")->name("update"); Route::delete("/", "TestEntityCRUDController@destroy")->name("destroy"); }); });
Пример готового роутера API (routes/api.php):
<?php use Illuminate\Support\Facades\Route; # /api/v1.0/ Route::group(["namespace" => "App\Http\Controllers\Api\V1_0", "prefix" => "/v1.0", "as" => "api.v1_0"], static function () { #/api/v1.0/testEntities Route::group([ "namespace" => "TestEntity", "prefix" => "/testEntities", "as" => "test_entities.", ], static function () { Route::get("/validations/{method?}", "TestEntityCRUDController@getValidations")->name("validations"); Route::get("/", "TestEntityCRUDController@index")->name("index"); Route::post("/search", "TestEntityCRUDController@index")->name("search"); Route::post("/setPosition", "TestEntityCRUDController@setPosition")->name("set-position"); Route::post("/", "TestEntityCRUDController@store")->name("store"); Route::delete("/", "TestEntityCRUDController@bulkDestroy")->name("bulk-destroy"); #/api/v1.0/testEntities/:key Route::group([ "prefix" => "/{key}", ], static function () { Route::get("/", "TestEntityCRUDController@show")->name("show"); Route::put("/", "TestEntityCRUDController@update")->name("update"); Route::delete("/", "TestEntityCRUDController@destroy")->name("destroy"); }); }); });
Лицензия
Лицензия MIT. Для получения большей информации обращайтесь к тексту лицензии.