lexiphanic / doctrine-rest-driver
Doctrine DBAL 的 RESTful API 驱动程序
2.2.3
2016-04-14 14:21 UTC
Requires
- php: >=5.5
- ci/restclientbundle: ^1.0
- doctrine/dbal: 2.*
- doctrine/orm: 2.*
- greenlion/php-sql-parser: ^4.0
Requires (Dev)
- doctrine/doctrine-bundle: ^1.6
- phpmd/phpmd: @stable
- phpunit/phpunit: @stable
- sensio/framework-extra-bundle: ^3.0
- symfony/expression-language: ^3.0
- symfony/framework-bundle: ^3.0
- symfony/validator: ^3.0
- symfony/yaml: ^3.0
This package is not auto-updated.
Last update: 2024-09-17 10:26:20 UTC
README
CircleOfNice DoctrineRestDriver 是我所需解决方案的一个很好的起点,但我发现了一些错误,因此自然地试图修复它们,但发现难以遵循且有些令人困惑,所以最终将其拆解以 A) 修复错误,B) 学习更多关于 Doctrine DBAL 的知识。
先决条件
- 此仓库,最好通过 composer
- PHP 5.5 或更高版本
安装
使用 composer 将驱动程序添加到您的项目中
composer require lexiphanic/doctrine-rest-driver
更改以下 doctrine dbal 配置条目
doctrine: dbal: connections: foo: driver_class: "Lexiphanic\\DoctrineRestDriver\\Driver" options: client: http.rest.location # Service for sending request, EG Guzzle transformer: http.rest.mysql.transformer # Service for transforming a query to Request
CircleOfNice 有许多选项允许您设置各种 CURL 选项,但这不是本项目关注的焦点。这也是为什么没有更多选项的原因。因此,如果您想更改请求、响应或转换器,则可以使用 Guzzle 中的中间件或创建自己的转换器。
用法
如果您的 API 路由遵循以下几个约定,使用该驱动程序非常简单
- 每个路由都必须具有相同的结构:
{guzzle base_uri}/{tableName}
- 如果有
id
列,则将其附加为{guzzle base_uri}/{tableName}/{id}
- 如果响应是一个只包含数组的数组,例如
['children'=>[children...], 'parents'=>[parents...]]
,则它被视为具有多行的结果,第 1 行是children...
,第 2 行是parents...
,依此类推;否则,它被视为单个结果集,例如['children'=>[...],'parents'=>[...]],'name'=>'...'
(这是因为在名称不是数组的情况下)将返回一个具有name
、children
和parents
属性的行 - 选择请求如下所示;
GET {guzzle base_uri}/{tableName}?foo=bar&bar(a,b)=foo
其中 SQL 为SELECT ... FROM {tableName} WHERE foo = 'bar' AND bar(a,b) = 'foo'
GET {guzzle base_uri}/{tableName}/{id}?foo=bar
其中 SQL 为SELECT ... FROM {tableName} WHERE foo = 'bar' AND id = {id}
;
- 删除请求遵循与选择请求相同的约定,但当然使用
Delete
动词 - 插入请求如下所示;
POST {guzzle base_uri}/{tableName}
请求体的内容将是 json 编码的key => value
对(有关创建方式,请参阅选择请求的示例)
- 更新请求与选择和插入请求类似,如下所示;
PUT {guzzle base_uri}/{tableName}/{id}?foo=bar
URI 和查询字符串遵循与选择请求相同的约定,而正文将与插入请求相同
- 如果 SQL 中存在以下内容,所有请求都将附加以下内容
LIMIT foo, bar
将附加?_offset=foo&limit=bar
(《foo》和《bar》将转换为《int》)ORDER BY foo, bar
将附加?_order=foo,bar
如果不是这种情况,您当然可以使用替代转换器、扩展此转换器或添加 Guzzle 中间件。