O Blend é um framework PHP para aplicações web orientadas pelo servidor. Ele possui convenções próprias para rotas, models, pages e geração de interfaces, priorizando desenvolvimento rápido e adequado à realidade brasileira.
- O Blend gera CRUDs dinamicamente a partir de um model e uma page, sem gerador de código.
- O framework possui tratamento nativo para formatos brasileiros, como datas, números, dinheiro, CPF e CNPJ.
- Uma aplicação pode utilizar vários bancos e tipos de banco simultaneamente.
- Atualmente, não há funcionalidade PHP classificada como legado; alguns nomes e estruturas históricas permanecem por compatibilidade.
- Todos arquivos são em minuscula e sem acentos.
- Textos em string no código são em português. Programação em inglês ( a exceção é algo brasileiro como CPF/CEP ).
- O padrão antigo organiza primeiro por tipo técnico, como
model/pedidoepage/pedido; ele continua adequado para projetos pequenos. - O padrão atual organiza primeiro pelo módulo, como
marketplace/modelemarketplace/page, mantendo o domínio agrupado como um monolito modular. - A arquitetura desejada permite que módulos se comuniquem somente por services.
- O
index.phpinicializa aAppe chamahandle(); a classe pode ser instanciada comnew, acessada porApp::getInstance()e estendida pelo projeto. - O roteamento utiliza
ppara page,epara evento evpara valor;cliente/editar/15chama o eventoeditarda page de cliente com o valor15. - A
Applocaliza a page, executa o evento e prepara uma resposta completa ou Ajax.
- O Blend não utiliza controllers separados: a page representa a página e exerce o papel de controller.
- Métodos públicos de uma page podem ser chamados como eventos por URL ou Ajax; métodos privados não podem.
- A autorização desses eventos depende da ACL implementada pelo projeto.
Page\Pageé a page básica e pode carregar um HTML para uma tela programada, inclusive com Vue.Page\Crudtrabalha com um model e gera automaticamente listagem, inclusão, visualização, edição e remoção.FieldLayout\Vectorgera os campos daPage\Crude distribui suas larguras com classes decol-1acol-12.Page\CrudDropZoneacrescenta upload, listagem e remoção de arquivos a um CRUD.Page\PagePopuppermite abrir operações de uma page dentro de um popup.- As interfaces
BeforeGridCreateRow,AfterGridCreateRow,AfterGridCreateCelleBeforeGridExportRowpermitem interferir na criação e exportação da grid.
- Os models seguem Active Record, de forma semelhante ao Laravel, e podem ser instanciados normalmente com
new. Model::query()cria umDb\QueryBuildervinculado ao model;new Db\QueryBuilder()cria uma consulta independente.- Cada model possui um esquema com colunas, relações e validators;
Db\Column\Searchpermite incluir subselects como campos de busca. Db\Collectioné a coleção normalmente utilizada para resultados de banco e listas de models.Db\ConstantValuestransforma constantes em listas de chave e descrição, evitando valores numéricos sem significado explícito.Log\IndexDatatraduz nomes de índices presentes em erros de banco para mensagens compreensíveis; está emLogpor organização histórica, mas conceitualmente pertence ao DB.
- Os catalogs geram o SQL específico para MySQL, Microsoft SQL Server e PostgreSQL.
- O suporte ao PostgreSQL está funcional, mas nunca foi utilizado em produção.
- A separação por catalog facilita adicionar suporte a outro banco.
- O config pode registrar várias conexões por
Db\ConnInfo, cada uma com um identificador. - A conexão
defaulté a padrão; cada model pode selecionar outra conexão sobrescrevendogetConnId(). - As conexões são abertas somente quando utilizadas, e não durante a inicialização da aplicação.
- Types representam e tratam dados no back-end; validators verificam sua validade.
Validator\ValidatorimplementaType\Generic, e ambos podem ser usados no esquema e nos getters dos models.- Entre os types estão CPF/CNPJ, data, data e hora, decimal, inteiro, dinheiro e horário.
- Há validators para CEP, CPF, CNPJ, data, e-mail, nome de arquivo, GTIN, inscrição estadual, inteiro, IP, telefone e caracteres repetidos.
- Validators podem ser instanciados com
newpara validação pelo model e também oferecem métodos auxiliares próprios.
- Services são normalmente classes estáticas e concentram operações ou regras que não pertencem à interface.
Db\Actionrepresenta uma operação relacionada a um model, como disparar um e-mail em consequência de uma operação.Component\Actionrepresenta uma ação de interface, principalmente de grid, e pode chamar umaDb\Action.
- Views são representações PHP de elementos HTML construídas sobre o PHP DOM, como
View\DiveView\Span. View\Extcontém elementos extras;View\Blendcontém elementos específicos mantidos nesse namespace histórico, embora conceitualmente também sejam extensões.- Components geram partes mais completas da interface, como combos, grids, timelines e visualizadores de arquivos.
- Os CSS do Blend servem como referência, mas não são utilizados diretamente no projeto.
DataHandlefornece acesso uniforme a GET, POST, request, server, session, user agent, files, cookies e configurações da aplicação.DataSourceadapta uma origem de dados para grids e outros consumidores, controlando paginação, filtros e agregações como total, soma e média.- As origens principais são
DataSource\Model,DataSource\VectoreDataSource\QueryBuilder.
Diskoferece recursos para arquivos, uploads, pastas e JSON com tratamento de erros.storagecontém arquivos temporários gerados pelo sistema, incluindo logs descartáveis; em tese, todo o seu conteúdo pode ser apagado.mediacontém normalmente arquivos do cliente e não deve ser tratado como temporário.- O caminho raiz de
mediaé único; alguns projetos organizam os arquivos dentro dele através de seu multi-tenancy. Media\Imagelê diversos formatos e dados binários, além de ler e exportar SVG e exportar ICO.Media\Colortrata cores utilizadas na manipulação de imagens.
ReportToolprocessa templates HTML e é utilizado principalmente para gerar PDFs.ReportTool\Templatepode ser usado separadamente e reconhece variáveis, models e DataSources.ReportTool\Enginepode gerar PDF através de mPDF ou wkhtmltopdf por meio deReportTool\WkPdf.
Miscreúne minimizadores de CSS e JavaScript, cálculos geográficos, otimização de arquivos e um timer utilizado para debug.
src/js/blend.jsé o núcleo JavaScript e implementa o contrato entre as pages PHP e a interface no navegador.- A função
b()é o manipulador DOM leve do Blend; parte do framework ainda usa jQuery, que é legado e será removido gradualmente. r()centraliza Ajax;p()faz Page Post,g()faz Page Get ee()chama um evento da page atual.- A função JavaScript
p()significa Page Post e não deve ser confundida com o parâmetro de rotap, que identifica a page. - O framework envia formulários e
FormData, controla loading, histórico, URL e rolagem. - O PHP retorna comandos com seletor, operação e conteúdo; as operações principais são
html,appendescript. - O array
blend.pluginsmantém plugins carregados:register()executa no carregamento inicial,start()também executa após cada Ajax ebeforeSubmit()executa antes do envio. blendJs()executa o JavaScript específico da page e é redefinida depois do uso.src/js/blendcontém comportamentos do framework e de components específicos;src/js/plugincontém plugins opcionais e mais gerais, ativados quando seus arquivos são carregados.