khazhinov/laravel-lighty 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

khazhinov/laravel-lighty

最新稳定版本:11.1.2

Composer 安装命令:

composer require khazhinov/laravel-lighty

包简介

A set of tools for quickly creating a CRUD REST API

README 文档

README

Social Card of Laravel Lighty

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. Для получения большей информации обращайтесь к тексту лицензии.

统计信息

  • 总下载量: 6.75k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 3
  • 点击次数: 0
  • 依赖项目数: 2
  • 推荐数: 0

GitHub 信息

  • Stars: 3
  • Watchers: 1
  • Forks: 2
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2022-09-07