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=barURI 和查询字符串遵循与选择请求相同的约定,而正文将与插入请求相同
- 如果 SQL 中存在以下内容,所有请求都将附加以下内容
LIMIT foo, bar将附加?_offset=foo&limit=bar(《foo》和《bar》将转换为《int》)ORDER BY foo, bar将附加?_order=foo,bar
如果不是这种情况,您当然可以使用替代转换器、扩展此转换器或添加 Guzzle 中间件。