geekyants / laravel-usedb

dev-master 2021-02-18 08:39 UTC

README

1) 介绍

Laravel-usedb是一个为Laravel应用程序提供的通用CRUD composer包,它消除了为Laravel应用程序中的每个模型编写API的需求。

2) 动机

这个想法是为了简化那些需要为不同项目创建类似类型的CRUD API的开发者的工作。使用此包,您可以对项目中任何模型执行CRUD操作。

3) 特点

  • URL:所有请求都汇总在同一个URL上,即 <APP_URL>/usedb。
  • 通用控制器:任何模型的CRUD操作都由同一个控制器处理。

4)安装

#COMPOSER
composer require geekyants/laravel-usedb

安装后,运行以下命令将包的配置文件移动到您的项目配置中。

php artisan vendor:publish --tag=config

5) 使用方法

所有API请求都接收在 <APP_URL>/usedb,方法类型始终为POST。

在发送请求时,以下字段是必需的

  • collection:它包含要执行操作的模型名称。

  • operation:操作的名称。

  • payload:它包含基于操作类型的不同值。

    payload中的必需字段

  1. 创建数据
  2. findOne where
  3. findMany skip, take
  4. 更新数据,where
  5. 删除 where

payload中的必需字段

添加中间件

usedb.php配置文件的中间件属性包含与我们的路由一起包含的中间件的条目。如果您想为路由分配中间件,请在中间件中添加条目。默认情况下,已添加usedb和model-usedb中间件到配置中。

设置模型类路径

usedb.php中的modelPath属性包含从该路径加载Model类的目录。默认情况下,其值被分配为 "App\Models\",这是Laravel的默认模型目录。

授权

授权可以通过两种方式进行:Gates和Policies。创建它们后,您需要在usedb配置文件中提及它们。

  1. :要将门映射到特定模型的特定操作,您必须在权限字段的gates属性中的数组中定义它。语法
'gates' => [
		'modelName' => [
        'update' => [],
        'delete' => [],
        'create' => [],
        'findOne' => [],
        'findMany' => []
    ]
]

modelName表示您想要应用门的模型的名称。 updatedeletecreatefindOnefindMany 将映射到要应用于相应操作的门的数组。

  1. 策略:要将策略应用于特定模型的一定操作,您必须在权限字段的policies属性中的数组中定义它。相同的语法
'policies' => [
	'update' => '',
        'delete' => '',
        'create' => '',
        'findOne' => '',
        'findMany' => ''
    ]
]

modelName表示您想要应用策略的模型的名称。 updatedeletecreatefindOnefindMany 将映射到要应用于相应操作的策略。

关联

当您想返回与关联模型的对象时,您必须在JSON提供的payload字段的include属性中指定从父对象访问子对象属性。

例如,我们有一个Blogs和comments之间的OneToMany关系。现在我们想检索带有其关联评论的博客,其JSON将如下所示

{
    "collection":"Blog",
    "operation":"findOne",
    "payload": {
        "where":{
            "id": 139
        },
       "include":{
            "comments":{}
        }
    }
}

6) 示例

假设我们有一个Post模型,它只有一个属性:标题。以下是对Post模型的CRUD示例

  1. 创建
{
	"collection":"Post",
	"operation":"create",
	"payload": {
			"data":
			{
				"caption": "Caption of the post"
			}
	}
}
  1. 查找一个
{
	"collection":"Post",
	"operation":"findOne",
	"payload": {
			"where":
			{
				"id": 1
			}
	}
}
  1. 更新
{
    "collection":"Post",
    "operation":"update",
    "payload": {
        "data": {
            "caption": "changed caption"
        },
        "where": {
            "id" : 10
        }
    }
}
  1. 删除
{
    "collection":"Post",
    "operation":"delete",
    "payload": {
        "where": {
            "id" : 3
        }
    }
}
  1. 查找多个
{
    "collection":"Post",
    "operation":"findMany",
    "payload": {
        "where": {
            "caption": "hello"
        },
        "skip": 1,
        "take": 5
    }
}