minerva-framework/minerva-frontql

FrontQL 是一个用于与 Zend Framework 一起使用的前端查询结构。

v1.0.8 2017-11-08 18:29 UTC

This package is not auto-updated.

Last update: 2024-09-20 19:04:26 UTC


README

Build Status Scrutinizer Code Quality Code Coverage Latest Stable Version Latest Unstable Version License

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
   }
]