yoganandgopalan / slim-skeleton
使用 Slim PHP 微型框架构建 RESTful API 的样板,具有限制、过滤、全文搜索、排序功能
Requires
- php: ^7.0
- awurth/slim-validation: ^3.0
- cartalyst/sentinel: ^2.0
- firebase/php-jwt: ^5.0
- illuminate/database: ^5.4
- illuminate/events: ^5.4
- incenteev/composer-parameter-handler: ^2.1
- monolog/monolog: ^1.23
- respect/validation: ^1.1
- slim/slim: ^3.8
- symfony/console: ^3.3
- symfony/http-foundation: ^3.3
- symfony/yaml: ^3.3
This package is not auto-updated.
Last update: 2024-09-22 13:10:22 UTC
README
这是一个用于快速构建 RESTful API 的 Slim PHP 微型框架的应用骨架,支持 CRUD、排序、分页和过滤
功能
- Eloquent ORM
- 认证 (Sentinel)
- 验证 (Respect + Slim Validation)
- 日志 (Monolog)
- 用于更新数据库模式创建用户的控制台命令
- RESTful 路由器
安装
$ 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 parseSingle
和 parseMultiple
返回一个具有以下方法的 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
选项更改为default
或native
来选择使用哪个。
注意:当使用空的_q
参数时,搜索将始终返回空结果。
有限的定制实现(默认)
给定文本被分成关键词,然后这些关键词在数据库中进行搜索。只要其中一个关键词存在,相应的行就会包含在结果集中。
/api/books?_q=The Lord of the Rings
上面的示例返回包含关键词The
、Lord
、of
、the
、Rings
之一的行。要考虑的列通过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定义抛出错误。