biliboobrian/microservice-crud

为 Lumen 构建的微服务 CRUD 便利层。

3.0.5 2020-10-10 11:11 UTC

This package is auto-updated.

Last update: 2024-09-10 19:57:18 UTC


README

为 Lumen 构建的微服务 CRUD 便利层。

描述

此包旨在在 Lumen 之上提供一个便利层,以简化开发 RESTful CRUD 微服务的流程。它减少了编写控制器、模型和 CRUD 逻辑的重复性。

包内容

  • 一个可以扩展以快速实现 RESTful CRUD 逻辑的抽象控制器。
  • 缓存清理观察者,以确保您的数据始终尽可能最新。

安装

正常安装包

$ composer require lushdigital/microservice-crud

该包需要在 bootstrap/app.php 中的 Lumen 配置中进行以下更改

<?php

// Uncomment the line below to enable Facade support.
$app->withFacades();

// Uncomment the line below to enable Eloquent ORM support.
$app->withEloquent();

// Add the line below to load database config. This is required for caching to work.
$app->configure('database');

用法

要创建一个新的 CRUD 资源,首先将模型从 \LushDigital\MicroServiceModelUtils\Models\MicroServiceBaseModel 扩展。该模型还必须实现 LushDigital\MicroServiceCrud\Models\CrudModelInterface 接口。

<?php 

namespace App\Models;

use LushDigital\MicroServiceModelUtils\Models\MicroServiceBaseModel;
use LushDigital\MicroServiceCrud\Models\CrudModelInterface;

class Example extends MicroServiceBaseModel implements CrudModelInterface
{
    /**
     * {@inheritdoc}
     */
    public function getValidationRules($mode = 'create', $primaryKeyValue = null)
    {
        // TODO: Implement getValidationRules() method.
    }
}

接下来,您需要创建一个扩展自 \LushDigital\MicroServiceCrud\Http\Controllers\CrudController 的控制器

<?php 

namespace App\Http\Controllers;

use LushDigital\MicroServiceCrud\Http\Controllers\CrudController;

class ExamplesController extends CrudController {}

最后,如果您正在使用缓存,需要将 Crud 观察者注册到您的模型上。通过编辑现有的 app/Providers/AppServiceProvider.php 类(或添加一个新的服务提供者)来完成此操作

<?php

namespace App\Providers;

use App\Models\Example;
use Illuminate\Support\ServiceProvider;
use LushDigital\MicroServiceCrud\Observers\CrudObserver;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        // Add an observer to the example model.
        Example::observe(CrudObserver::class);
    }
}

请确保您的服务提供者已添加(或取消注释)在 bootstrap/app.php

$app->register(App\Providers\AppServiceProvider::class);

模型

注意,上述模型称为 Example,控制器称为 ExamplesController。这遵循您熟悉的 Laravel 的复数模式。基本上,控制器名称需要是模型复数形式加上 'Controller'。

这可以通过覆盖控制器中的 $modelBaseClass 属性来更改

<?php 

namespace App\Http\Controllers;

use LushDigital\MicroServiceCrud\Http\Controllers\CrudController;

class ExamplesController extends CrudController 
{
    /**
     * The model associated with the CRUD controller.
     * 
     * @var string  
     */
    protected $modelBaseClass = 'NotAnExample';
}

模型命名空间

CRUD 控制器假定模型位于 App\Models 命名空间中(例如 App\Controllers\ExamplesController > App\Models\Example)。

这可以通过覆盖 $modelNamespace 属性来更改

<?php 

namespace App\Http\Controllers;

use LushDigital\MicroServiceCrud\Http\Controllers\CrudController;

class ExamplesController extends CrudController 
{
    /**
     * The model associated with the CRUD controller.
     * 
     * @var string  
     */
    protected $modelNamespace = 'My\\Awesome\\Namespace';
}

缓存属性

此包提供了根据模型任何属性缓存数据的支持。默认情况下,此包将仅使用 id 属性缓存数据。这使用缓存键来实现,因此对于 id 为 1 的 Example 模型实例,以下缓存键将在读取时设置并在更新/删除时清除

examples:index
examples:1

请注意,:index 缓存键始终用于索引端点列表所有模型实例。

要基于其他属性进行缓存,只需覆盖模型中的 $attributeCacheKeys 属性

<?php 

namespace App\Models;

use LushDigital\MicroServiceModelUtils\Models\MicroServiceBaseModel;

class Example extends MicroServiceBaseModel
{
    /**
     * A list of the model attributes that can be used as cache keys.
     *
     * @var array
     */
    protected $attributeCacheKeys = ['name'];
}

因此,在此缓存中,ID 为 1、名称为 'test' 的 Example(ID: 1)将具有缓存键 examples:name:test

路由

一旦设置好控制器和模型,您需要配置路由。该包提供了标准 REST 端点(GET、POST、PUT、DELETE)的逻辑。您可以使用任意多或任意少的端点,所有端点的示例如下

<?php

// routes/web.php
$app->get('/examples', 'ExamplesController@index');
$app->post('/examples', 'ExamplesController@store');
$app->get('/examples/{id}', 'ExamplesController@show');
$app->put('/examples/{id}', 'ExamplesController@update');
$app->delete('/examples/{id}', 'ExamplesController@destroy');