yoganandgopalan/slim-skeleton

使用 Slim PHP 微型框架构建 RESTful API 的样板,具有限制、过滤、全文搜索、排序功能

v1.0.0 2018-05-28 20:07 UTC

This package is not auto-updated.

Last update: 2024-09-22 13:10:22 UTC


README

这是一个用于快速构建 RESTful API 的 Slim PHP 微型框架的应用骨架,支持 CRUD、排序、分页和过滤

功能

安装

$ composer create-project -s dev yoganandgopalan/slim-skeleton [app-name]

下载供应商包

$ composer update

功能

创建数据库表

$ php bin/console db

创建用户

$ php bin/console user:create

使用 --admin 选项将用户设置为管理员

导出路由

在项目根目录执行以下命令,以在终端打印所有路由

$ php bin/console routes

使用 --markdown 或 -m 选项以 Markdown 格式显示路由

$ php bin/console routes -m > API.md

如果你使用 Oh My Zsh,你可以安装 symfony2 插件,它提供别名和自动完成功能

# Without Symfony2 plugin
$ php bin/console db

# With Symfony2 plugin
$ sf db

注意

你可能想将认证部分替换为真正的 OAuth 实现

排序、过滤、限制

自定义标识列

如果你将数组作为 parseSingle 的第二个参数传递,现在必须有列/值对。这允许我们传递多个条件,例如

SortFilter::parseSingle($request, $books, array('id_origin' => 'Random Bookstore Ltd', 'id' => 1337));

URL 解析

当前支持以下 URL 解析

  • 限制字段
  • 过滤
  • 全文搜索
  • 排序
  • 定义限制和偏移量

支持两种类型的 API 资源,单个对象和对象集合。

单个对象

如果你处理表示单个对象的资源(例如 /api/books/1)的 GET 请求,请使用 parseSingle 方法。

parseSingle($request, $queryBuilder, $identification, [$queryParams])

  • $request: 控制器请求
  • $queryBuilder: 查询构建器对象、Eloquent 模型或 Eloquent 关系
  • $identification: 用于 id 列的一个整数,或一个列/值对数组(例如 array('isbn' => '1234'))作为对象的唯一标识符。
  • $queryParams: 包含查询参数的数组。如果未定义,则使用原始 GET 参数。
SortFilter::parseSingle($request, $book, 1);

对象集合

如果你处理表示多个对象的资源(例如 /api/books)的 GET 请求,请使用 parseMultiple 方法。

parseMultiple($request, $queryBuilder, $fullTextSearchColumns, [$queryParams])

  • $request: 控制器请求
  • $queryBuilder: 查询构建器对象、Eloquent 模型或 Eloquent 关系
  • $fullTextSearchColumns: 定义用于全文搜索的列的数组。
  • $queryParams: 包含查询参数的数组。如果未定义,则使用原始 GET 参数。
SortFilter::parseMultiple($request, $book, array('title', 'isbn', 'description'));

结果

both parseSingleparseMultiple 返回一个具有以下方法的 Result 对象

getBuilder(): 返回应用于其上的所有函数的原生 $queryBuilder

getResult(): 返回 Laravel 的 get()first() 函数返回的结果对象。

getResultOrFail(): 如果你期望多个对象,则返回 Laravel 的 get() 函数返回的结果对象,或者如果你期望单个对象,则返回 firstOrFail()

getResponse($resultOrFail = false): 返回一个包含正文、头部和HTTP状态码的Laravel Response对象。如果$resultOrFail为true,将使用内部方法getResultOrFail()而不是getResult()

cleanup($cleanup): 如果为true,则结果数组将清除意外添加的关系。如果这些关系作为模型访问器中的属性访问,则可以自动添加。全局默认的清理可以通过配置选项cleanup_relations定义,默认为false

SortFilter::parseSingle($books, 42)->cleanup(true)->getResponse();

过滤

除了预定义的函数_fields_sort_limit_offset_q之外,每个查询参数都被解释为过滤器。在传递给parseMultiple之前,请确保删除了不用于过滤的额外参数。

/api/books?title=The Lord of the Rings

所有过滤器都使用AND运算符进行组合。

/api/books?title-lk=The Lord*&created_at-min=2014-03-14 12:55:02

上面的示例将产生以下SQL语句中的结果

WHERE `title` LIKE "The Lord%" AND `created_at` >= "2014-03-14 12:55:02"

还可以为单个过滤器使用多个值。多个值由竖线|分隔。除非有-not后缀,否则多个值使用OR组合。例如,所有ID为5或6的书籍

/api/books?id=5|6

或者所有不是ID为5或6的书籍

/api/books?id-not=5|6

同样可以使用-in后缀实现

/api/books?id-in=5,6

相应的是not-in后缀

/api/books?id-not-in=5,6
后缀

排序

有两种排序方式,升序和降序。每个需要降序排序的列始终以-开头。

/api/books?_sort=-title,created_at

全文搜索

支持两种全文搜索实现。您可以通过将配置文件中的fulltext选项更改为defaultnative来选择使用哪个。

注意:当使用空的_q参数时,搜索将始终返回空结果。

有限的定制实现(默认)

给定文本被分成关键词,然后这些关键词在数据库中进行搜索。只要其中一个关键词存在,相应的行就会包含在结果集中。

/api/books?_q=The Lord of the Rings

上面的示例返回包含关键词TheLordoftheRings之一的行。要考虑的列通过parseMultiple传递。

原生MySQL实现

如果您的MySQL版本支持您使用的引擎的全文搜索,您可以在API处理器中使用此高级搜索。
只需将fulltext配置选项更改为native,并确保对传递给parseMultiple的列有适当的全文索引。

每个结果还将包含一个_score列,允许您根据与搜索词的匹配程度对结果进行排序。例如。

/api/books?_q=The Lord of the Rings&_sort=-_score

您可以通过修改配置文件中的fulltext_score_column设置来调整此列的名称。

限制结果集

要定义结果中数据集的最大数量,请使用_limit

/api/books?_limit=50

要定义结果集中数据集的偏移量,请使用_offset

/api/books?_offset=20&_limit=50

请注意,为了使用offset,您必须始终指定一个limit。如果未指定limit,MySQL会对offset定义抛出错误。