minerva-framework / minerva-frontql
FrontQL 是一个用于与 Zend Framework 一起使用的前端查询结构。
v1.0.8
2017-11-08 18:29 UTC
Requires
- phpunit/phpunit: 5.6.5
- zendframework/zend-db: 2.8.2
README
composer require minerva-framework/minerva-frontql
FrontQL 是一个简化了的前端查询结构,兼容 Zend Framework。使用 FrontQL 可以让您在构建查询和实现 API 时获得更多灵活性,同时节省工作时间并避免在 actions 中创建多个条件,使代码变得混乱或包含不必要的策略实现。
在前端
在前端,您可以选择使用 where 命令、where 操作符、列选择、限制和排序。在 where 命令中,数组的第一元素是 Zend Framework 中的命令名称,其余参数由该命令要求。作为操作符,我们有 and、or、in 和 unnest。
var select = { where : [ 'nest', ['equalTo', 'Campanha.idcampanha', 11], 'and', ['equalTo', 'Campanha.ativo', 1], 'unnest', 'or', ['equalTo', 'Campanha.idcampanha', 12] ], limit : 5, offset : 0, order : [ [['Campanha.idcampanha'], 'DESC'] ], }; return ApiClient.post('/crm/api/v1/campanha/select', {fql: select});
在后端
当收到有效载荷时,只需实例化适配器,进行转换,如果需要则进行覆盖,执行查询并构建响应。
// Query recebida do front-end $payload = $this->params()->fromPost('fql'); // Conversão para Zend\Db\Sql\Select $adapter = new SelectAdapter(); $adapter->setProtectedColumns(['name']); $adapter->setSelectPayload(new SelectPayload($payload)); $query = $adapter->getSelect(); // Override $query->limit(2); // Consulta $clientTable = new ClientTableGateway(); $resultSet = $clientTable->select($query); // Resposta $response = new JsonModel($resultSet->toArray()); return $response;
响应
按照上述大纲,您将收到如下格式的响应。
[
{
email: 'lucas@minervasistemas.com.br',
idade: 21
},
{
email: null,
idade: 19
}
]