uspdev/replicado
Composer 安装命令:
composer require uspdev/replicado
包简介
Classes PHP que consome dados do Replicado USP
README 文档
README
Biblioteca PHP que abstrai em classes a camada de acesso ao replicado USP, isto é, ao invés de inserir uma consulta SQL diretamente em seu código, como por exemplo:
SELECT nompes,... FROM pessoa WHERE codpes='123'
Usa-se uma classe PHP que faz a abstração do acesso e portanto deixa seu código muito mais limpo, além de torna as consultas reutilizáveis:
Pessoa::nomeCompleto('123');
Docker
docker compose up --build
Como usar
Instale via composer
composer require uspdev/replicado
Exemplo de uso passando $config
<?php namespace Meu\Lindo\App; require_once __DIR__ . '/vendor/autoload.php'; use Uspdev\Replicado\Pessoa; use Uspdev\Replicado\Replicado; $config = [ 'host' => '192.168.100.89', 'port' => 1498, 'database' => 'rep_dbc', 'username' => 'dbmaint_read', 'password' => 'secret', 'codundclg' => '8', 'codundclgs' => '8,84', 'pathlog' => 'path/to/your.log', 'sybase' => true, 'usarCache' => false, 'debug' => false, 'debugLevel' => 1, ]; Replicado::setConfig($config); $emails = Pessoa::emails('123456'); print_r($emails);
Exemplo de uso com variáveis de ambiente
<?php namespace Meu\Lindo\App; require_once __DIR__ . '/vendor/autoload.php'; use Uspdev\Replicado\Pessoa; # Obrigatórias putenv('REPLICADO_HOST=192.168.100.89'); putenv('REPLICADO_PORT=1498'); putenv('REPLICADO_DATABASE=rep_dbc'); putenv('REPLICADO_USERNAME=dbmaint_read'); putenv('REPLICADO_PASSWORD=secret'); putenv('REPLICADO_CODUNDCLG=8'); putenv('REPLICADO_CODUNDCLGS=8,84'); # Opcionais - estes são os valores default putenv('REPLICADO_PATHLOG=/tmp/replicado.log'); putenv('REPLICADO_SYBASE=true'); putenv('REPLICADO_USAR_CACHE=false'); putenv('REPLICADO_DEBUG=false'); putenv('REPLICADO_DEBUG_LEVEL=1'); putenv('REPLICADO_FAKE=0'); $emails = Pessoa::emails('123456'); print_r($emails);
Como usar no laravel
Veja o projeto Uspdev\laravel-replicado.
Explicações das variáveis
A maioria das variáveis são autoexplicativas mas outras não.
REPLICADO_CODUNDCLG - essa variável é o código da unidade. Até 11/2022, ela podia conter valores separados por vírgula. No entanto, para manter compatibilidade e organizar melhor, criou-se outra váriável para conter múltiplos valores:
REPLICADO_CODUNDCLG=8
REPLICADO_CODUNDCLGS (com S no final) - Representa os colegiados da unidade. Importante para as unidades que tem cursos compartilhados.
REPLICADO_CODUNDCLGS=8,27
Atenção, NÃO usar aspas, como neste exemplo: REPLICADO_CODUNDCLG="8,27".
REPLICADO_SYBASE - serve para indicar se vc está usando SYBASE ou MSSQL. Implica:
- na conversão para UTF-8 pela biblioteca ou pelo freetds
- na remoção de espaços adicionais no final das strings
Dependendo da configuração do MSSQL pode ser necessário ativar essa variável.
REPLICADO_USAR_CACHE - o replicado pode usar memcached através da biblioteca (https://github.com/uspdev/cache).
Para usar é necessário instalar ele com
composer require uspdev/Cache
e seguir a documentação da biblioteca para levantar o servidor memcached e configurar ele.
Por fim ative o cache do replicado com
putenv('REPLICADO_USAR_CACHE=1');
Ainda é possível controlar o comportamento do cache somente para o replicado com
putenv('REPLICADO_CACHE_EXPIRY=14400'); // 4 horas para expirar
putenv('REPLICADO_CACHE_SMALL=32'); // tamanho máx em bytes do retorno que não vai ser cacheado
Em produção vale a pena usar mas em testes mantenha desativado.
REPLICADO_FAKE
Se a variável REPLICADO_FAKE for igual a 1, não será executado consultas no replicado e dados fakes fixos serão retornado. Esse cenário é útil para implementação de testes automatizados ou para conhecer previamente o tipo e a estrutura dos dados que é retornado em cada método.
Debug
A variável debug, se true, mostra mensagens na tela em caso de erro.
Por padrão os erros também são gravados no log. Caso queira gravar em log as queries executadas no BD do replicado, aumente o debugLevel para 2.
putenv('REPLICADO_DEBUG_LEVEL=2');
Config reset
No método Lattes::obterZip(), pode ser necessário alterar a configuração do replicado momentaneamente definindo sybase = false. Isso é possível com o comando abaixo
Replicado::setConfig(['sybase' => false]);
Para retornar às configurações do env, pode-se utilizar o comando reset como segue
Replicado::setConfig(['reset' => true]);
Informações sobre tabelas
https://uspdigital.usp.br/replunidade
Recomendações para contribuir com este projeto
Vídeo: https://youtu.be/p5dFJOrMN30
O replicado pode consultar tanto o MSSQL quanto o sybase-ase e em diversas versões diferentes. Dessa forma é necessário manter a compatibilidade com os diversos replicados das unidades.
- Abra uma issue antes de começar a mexer no código. A discussão prévia é importante para alinhar as idéias.
- As contribuições serão aceitas por meio de pull requests. Para tanto faça as alterações em uma branch issue_xx.
- Documentar o DOCBLOCK
- Texto principal, texto complementar, @param, @return
- @author seu-nome, em xx/xx/xxxx ou
- @author seu-nome, modificado em xx/xx/xxxx
- Coloque o sql em resources/queries
- Os argumentos dos métodos devem ser tipados, incluindo int, string etc
- (11/2022) Caso ocorra algum erro, os métodos
DB::fetcheDB::fetchAllretornamfalsee uma mensagem de erro. Em caso de retorno "vazio", alguns métodos precisam de tratamento:- obterXxxx:
PDOStatement::fetch()retorna false em caso de vazio. Nesse caso use
return DB::fetch($query) :? []; - retornarXxxx: deve retornar
null
- obterXxxx:
- Dar preferência para aspas simples em strings pois o PHP não tenta parsear seu conteúdo
- A branch
masteré considerada estável e pode ser usada em produção, porém osreleasestêm sido regulares.
Referência: Pessoa::listarDesignados()
Sugestão para nomear métodos:
- listarXxx - retorna lista de registros de dados (
fetchAll) - obterXxxx - retorna somente um registro (
fetch) - contarXxxx - retorna uma contagem (
count()) - retorno tipoint - retornarXxxx - retorna um valor do registro - retorno
string,int, etc - verificarXxxx - retorna true ou false em função da condição - retorno
bool
OBS1.: Quando passar parâmetro array simples, deixar opcional passar string separada por vírgula. Ex.: Pessoa::contarServidoresSetor()
OBS2.: (11/2022) As queries dos métodos devem ficar em resources/queries e as substituições, se necessário podem ser feitas no método DB::getQuery('arquivo.sql', $replaces)
OBS3.: (10/2023) Se necessário usar REPLICADO_CODUNDCLGS ou REPLICADO_CODUNDCLG na query, basta colocar __codundclgs__ ou __codundclg__ que a biblioteca fará a substituição correspondente. A substituição é feita no método DB::overrideFetch. Mas se quiser passar algo diferente do config, fique à vontade.
OBS4.: Nos métodos não usar getenv('REPLICADO_VARIAVEL'). Usar, se necessário, Replicado::getConfig('variavel').
Métodos deprecados
Se você utiliza um desses métodos nos seus sistemas, atualize para o novo método correspondente.
2020
- Pessoa::nome -> procurarPorNome (11/2020)
- Pessoa::nomeFonetico -> procurarPorNome (11/2020)
2021
- Pessoa::vinculosSiglas -> obterSiglasVinculosAtivos (3/2021)
- Pessoa::setoresSiglas -> obterSiglasSetoresAtivos (6/2021)
- Pessoa::emailusp -> retornarEmailUsp (6/2021)
- Pessoa::designados -> listarDesignados (7/2021)
- Graduacao::ativos -> listarAtivos (10/2021)
- Pessoa::nomeCompleto -> obterNome (12/2021)
2022
- Pessoa::servidores -> listarServidores (1/2022)
- Pessoa::vinculosSetores -> listarVinculosSetores (9/2022)
- Pessoa::tiposVinculos -> listarTiposVinculoExtenso (11/2022)
- Graduacao::curso -> obterCursoAtivo (11/2022)
- Pessoa::listarVinculosSetores -> a ser removido e adicionado no uspdev/web-ldap-admin listarVinculosExtensoSetores (11/2022)
uspdev/replicado 适用场景与选型建议
uspdev/replicado 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 7.28k 次下载、GitHub Stars 达 13, 最近一次更新时间为 2018 年 03 月 29 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 uspdev/replicado 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 uspdev/replicado 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 7.28k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 13
- 点击次数: 6
- 依赖项目数: 6
- 推荐数: 0
其他信息
- 授权协议: GPL-2.0-or-later
- 更新时间: 2018-03-29