yaangvu/laravel-base

Laravel API 资源基础

v4.0.42 2024-01-12 05:12 UTC

README

此基础可以帮助创建针对1个特定实体的简单API(CRUD)

安装

composer require yaangvu/laravel-base

对于Laravel

发布配置文件和基础类

php artisan vendor:publish --provider="YaangVu\LaravelBase\Providers\BaseServiceProvider"

对于Lumen

cp vendor/yaangvu/laravel-base/src/config/laravel-base.php config/laravel-base.php
mkdir -p app/Base
cp vendor/yaangvu/laravel-base/src/Base/Publish/Controller.php app/Base/Controller.php
cp vendor/yaangvu/laravel-base/src/Base/Publish/Service.php app/Base/Service.php

生成命令

如果你想要使用生成命令,请将以下类添加到 providers 数组中的 config/app.php

  YaangVu\LaravelBase\Provider\GeneratorServiceProvider::class,

如果你只想在非生产环境中手动加载它,你可以将其添加到 AppServiceProvider 中的 register() 方法

  public function register()
  {
      if ($this->app->isLocal()) {
          $this->app->register(\YaangVu\LaravelBase\Provider\GeneratorServiceProvider::class);
      }
      // ...
  }

初始API资源

生成代码

php artisan yaangvu:base Post <option>

选项

  • -S: 使用默认Swagger注释生成代码
  • -i: 在控制器方法中自动注入服务

生成的代码目录结构

├── app
│   ├── Domains
│   │   └── Post
│   │       ├── Controllers
│   │       │   └── PostController.php
│   │       ├── Models
│   │       │   └── Post.php
│   │       └── Services
│   │           └── PostService.php

路由

Route::base('/posts', \App\Domains\Post\Controllers\PostController::class);

用法

动态查询参数

支持的运算符

$operators
        = [
            '__gt' => OperatorConstant::GT, // Greater than
            '__ge' => OperatorConstant::GE, // Greater than or equal
            '__lt' => OperatorConstant::LT, // Less than
            '__le' => OperatorConstant::LE, // Less than or equal
            '__~'  => OperatorConstant::LIKE // Like
        ];

查询时,可以添加更多格式为的参数

{param-name}{operator} = {value}

示例

  1. username = admin ----> username 等于 admin
  2. name__~ = super ----> name 类似于 %super%
  3. age__gt = 18 ----> age 大于 18

完整的请求示例

请求查询用户,其中 username=adminname LIKE %super% 以及 age > 18

curl --location --request GET 'https://:8000/api/v1/users?username=admin&name__~=super&age__gt=18'

在添加实体之前进行验证

支持完整的Laravel验证:[验证](https://laravel.net.cn/docs/master/validation)

class UserService extends BaseService
{
    public function storeRequestValidate(object $request, array $rules = []): bool|array
    {
        $rules = [
            'username' => 'required|max:255|unique:users',
        ];

        return parent::storeRequestValidate($request, $rules);
    }
}

在更新实体之前进行验证

支持完整的Laravel验证:[验证](https://laravel.net.cn/docs/master/validation)

class UserService extends BaseService
{
    public function updateRequestValidate(int|string $id, object $request, array $rules = []): bool|array
    {
        $rules = [
            'username' => 'required|max:255|unique:users,id',
        ];
        
        return parent::updateRequestValidate($id, $request, $rules);
    }
}

服务观察

它支持以下观察函数

  1. function postAdd()
  2. function postUpdate()
  3. function postDelete()
  4. function postGet()
  5. function postGetAll()

缓存数据

如果你想在 createupdateselect 时缓存数据,则实现 ShouldCache 接口

class UserService extends BaseService implements \YaangVu\LaravelBase\Base\Contract\ShouldCache
{}