Download the PHP package betocampoy/champs-frontend without Composer
On this page you can find all versions of the php package betocampoy/champs-frontend. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download betocampoy/champs-frontend
More information about betocampoy/champs-frontend
Files in betocampoy/champs-frontend
Package champs-frontend
Short Description Templates Twig compartilhados e champs-core-js para projetos legados e Symfony.
License MIT
Informations about the package champs-frontend
betocampoy/champs-frontend
Pacote Composer que centraliza templates Twig compartilhados e o micro-framework JavaScript champs-core-js para uso em projetos Symfony e projetos PHP legados com Twig.
A ideia central é eliminar a necessidade de escrever JavaScript customizado para os comportamentos de interface mais comuns, usando apenas atributos data-champs-* no HTML.
Índice
- O que o pacote entrega
- Requisitos
- Instalação
- Configuração no Symfony
- Configuração no legado
- Publicação dos assets
- Templates Twig disponíveis
- UI
- Lista
- Módulos JavaScript
- PHP: AjaxFormResponse
- Solução de problemas
- Licença
O que o pacote entrega
| O que | Onde fica | Como usar |
|---|---|---|
| Templates Twig compartilháveis | vendor/.../templates/ |
Namespace @ChampsFrontend |
Micro-framework JS (champs-core-js) |
assets/champs-core-js/ |
Publicar e importar via init.js |
| Bootstrap simples para legado | src/LegacyBootstrap.php |
LegacyBootstrap::createRenderer(...) |
| Construtor de respostas AJAX | src/Response/AjaxFormResponse.php |
AjaxFormResponse::make()->...->toJson() |
| Script de publicação de assets | bin/champs-frontend-publish-assets |
composer run champs-frontend-publish-assets |
Requisitos
- PHP 8.1+
twig/twig^2.12 ou ^3.0- Bootstrap 5 (peer dependency — o projeto consumidor é responsável por instalar)
- Bootstrap Icons (opcional, mas usado pelos componentes Twig de formulário)
Instalação
Configuração no Symfony
1. Registrar o namespace Twig
Abra config/packages/twig.yaml e adicione:
Após qualquer alteração no twig.yaml, limpe o cache:
2. Publicar os assets para assets/
Isso copia os arquivos para assets/vendor/champs-frontend/.
3. Incluir CSS e JS no template base
4. Criar ou ajustar assets/app.js
5. Usar componentes nos templates
Configuração no legado
Use a classe LegacyBootstrap para montar o renderer Twig. Ela registra automaticamente:
- a pasta de templates do projeto
- o namespace
@ChampsFrontend - a extension com as funções
path()easset()
Bootstrap do renderer
Publicar os assets no legado
Incluir CSS e JS no HTML
Se o projeto tiver um app.js próprio, siga o mesmo padrão do Symfony e importe a partir dele.
Publicação dos assets
O navegador não acessa arquivos dentro de vendor/, então os assets precisam ser copiados.
| Projeto | Destino padrão | Comando |
|---|---|---|
| Symfony | assets/vendor/champs-frontend |
composer run champs-frontend-publish-assets |
| Legado | public/vendor/champs-frontend |
php vendor/bin/champs-frontend-publish-assets public/vendor/champs-frontend |
O destino pode ser qualquer caminho: php vendor/bin/champs-frontend-publish-assets <destino>.
Templates Twig disponíveis
Os templates ficam na vendor/ e são acessados pelo namespace @ChampsFrontend. Você não precisa copiá-los para o seu projeto.
UI
_form.html.twig — macros de formulário
| Macro | Descrição |
|---|---|
ui.input(options) |
Campo de formulário Bootstrap (<div class="col"> + <input>) |
ui.button(options) |
Botão Bootstrap padrão |
ui.ajaxButton(options) |
Botão com submissão AJAX via data-champs-ajax |
ui.attrs(map) |
Renderiza um mapa como atributos HTML |
Exemplo — input:
Exemplo — botão AJAX:
_modal.html.twig — modais Bootstrap
Exemplo — modal com formulário:
_card.html.twig — card Bootstrap
_notification_center.html.twig — central de notificações
Lista
Templates para construção de páginas de listagem.
| Template | Descrição |
|---|---|
_page_header.html.twig |
Cabeçalho da página com título e subtítulo |
_search_collapse.html.twig |
Filtro de busca colapsável |
_list_content.html.twig |
Container genérico de lista |
_pager.html.twig |
Paginação |
_empty.html.twig |
Estado vazio (sem registros) |
table/_table.html.twig |
Exibição em tabela |
grid/_grid.html.twig |
Exibição em grid |
Exemplo — cabeçalho:
Módulos JavaScript
O champs-core-js é um micro-framework JavaScript puro (sem dependências externas) com módulos independentes ativados por atributos data-champs-*.
Para referência completa de todos os atributos disponíveis, consulte assets/champs-core-js/DATA-DICTIONAIRE.md.
Para documentação detalhada de cada módulo, consulte assets/champs-core-js/README.md.
Resumo dos módulos
| Módulo | Arquivo | Responsabilidade |
|---|---|---|
AjaxForm |
modules/AjaxForm.js |
Submissão AJAX declarativa e pipeline de actions |
DomPatch |
modules/DomPatch.js |
Manipulação de DOM via actions do backend |
ActionRules |
modules/ActionRules.js |
Regras condicionais declarativas na UI |
InputSanitize |
modules/InputSanitize.js |
Normalização de entradas de texto |
InputMask |
modules/InputMask.js |
Máscaras de input (telefone, CPF, data, etc.) |
Validate |
modules/Validate.js |
Validação de CPF, CNPJ e Inscrição Estadual |
ValidationError |
modules/ValidationError.js |
Exibição de erros de validação do backend |
ZipcodeSearch |
modules/ZipcodeSearch.js |
Busca de CEP via ViaCEP com autopreenchimento |
VisibilityToggle |
modules/VisibilityToggle.js |
Exibir/ocultar campos sensíveis |
CheckboxGroup |
modules/CheckboxGroup.js |
Seleção em grupo, contador e soma |
CopyText |
modules/CopyText.js |
Copiar texto para a área de transferência |
FormPopulation |
modules/FormPopulation.js |
Preencher selects/inputs dinamicamente |
FormFiller |
modules/FormFiller.js |
Preenchimento em massa de campos |
RemoteSelect |
modules/RemoteSelect.js |
Popula selects a partir de API remota |
DatalistManager |
modules/DatalistManager.js |
Autocomplete com datalist |
ModalManager |
modules/ModalManager.js |
Wrapper para modais Bootstrap 5 |
AutoOpen |
modules/AutoOpen.js |
Abertura automática de elementos no carregamento |
Loader |
modules/Loader.js |
Indicador de carregamento |
Message |
modules/Message.js |
Sistema de toast/mensagens globais |
NotificationCenter |
modules/NotificationCenter.js |
Central de notificações in-app |
NavLoader |
modules/NavLoader.js |
Loader durante navegação entre páginas |
TabsPersistence |
modules/TabsPersistence.js |
Persistência da aba ativa (Bootstrap Tabs) |
FormSectionsPersistence |
modules/FormSectionsPersistence.js |
Persistência de seções colapsadas |
PreferenceManager |
modules/PreferenceManager.js |
Wrapper genérico para localStorage/sessionStorage |
ConsentManager |
modules/ConsentManager.js |
Consentimento de cookies (LGPD) |
DynamicColspan |
modules/DynamicColspan.js |
Colspan automático em tabelas |
Calc |
modules/Calc.js |
Cálculos dinâmicos em formulários |
PushManager |
modules/PushManager.js |
Notificações Push via Firebase FCM |
Exemplos rápidos
Máscara de input:
CEP com autopreenchimento:
Copiar texto:
Consentimento LGPD:
Submissão AJAX (sem Twig):
Fila de submits (bipagem/scanner mais rápido que o round-trip):
Sem data-champs-ajax-queue, um submit disparado enquanto o anterior ainda
está em voo é simplesmente descartado. Com a fila ativada, cada submit tira
um snapshot dos campos na hora (o usuário já pode digitar/bipar o próximo
valor) e processa um item por vez, em ordem. A lib não desenha nenhuma UI —
cada tela ouve os 3 eventos e desenha sua própria lista "fila"/"processados":
PHP: AjaxFormResponse
Construtor fluente para montar a resposta JSON das actions do pipeline.
Actions disponíveis
| Método | Action gerada | Efeito no frontend |
|---|---|---|
messageSuccess($text) |
message |
Toast de sucesso |
messageError($text) |
message |
Toast de erro |
messageInfo($text) |
message |
Toast informativo |
messageWarning($text) |
message |
Toast de aviso |
validationError($fields) |
validation-error |
Marca campos inválidos e interrompe o pipeline |
domPatchHtml($options, $html) |
dom-patch |
Substitui/insere HTML no DOM |
redirect($url) |
redirect |
Redireciona para URL e interrompe o pipeline |
reload() |
reload |
Recarrega a página e interrompe o pipeline |
modal($options) |
modal |
Abre um modal Bootstrap |
formfiller($data) |
formfiller |
Preenche campos do formulário |
populate($data) |
populate |
Popula selects/inputs filhos |
custom($function, $data) |
custom |
Executa função global JavaScript customizada |
Formato JSON da resposta
Actions terminais
As actions abaixo interrompem a execução do pipeline assim que são processadas:
validation-errorredirectreload
PHP: Notificações Push (FcmClient)
O pacote fornece o cliente JavaScript (PushManager.js) e o service worker (firebase-messaging-sw.js) para captura e registro de tokens FCM no browser. O envio server-side fica a cargo do projeto consumidor usando symfony/http-client e a FCM HTTP v1 API.
Pré-requisito
Baixe o JSON de credenciais do service account em:
Firebase Console → Configurações do projeto → Contas de serviço → Gerar nova chave privada
Salve o arquivo fora do repositório (ex.: config/firebase/firebase-service-account.json) e adicione-o ao .gitignore.
Implementação recomendada no projeto consumidor (Symfony)
1. Serviço de envio (FcmClient.php):
2. Entidade de persistência (PushSubscription):
3. Endpoint de registro (controller):
4. Envio com ícone e link (exemplo):
5. Command para cron:
Solução de problemas
There are no registered paths for namespace "ChampsFrontend"
O namespace não foi registrado no Twig. Para Symfony, verifique se config/packages/twig.yaml contém o paths correto e rode php bin/console cache:clear.
Templates não encontrados após atualização do pacote
O Twig pode ter em cache uma versão antiga. Limpe o cache:
Assets não atualizados após composer update
Repita o comando de publicação:
O initCore não está inicializando os módulos
Verifique se:
- O script usa
type="module"no HTML - O
initCore(document)é chamado dentro do eventoDOMContentLoaded - O caminho para
init.jsestá correto após a publicação dos assets
Módulos JS não reagem a elementos inseridos dinamicamente
O initCore precisa ser chamado novamente passando o container do novo conteúdo:
Observações gerais
- O pacote não impõe template base. Use
{% include %}e{% import %}nos layouts já existentes no seu projeto. - O Twig não exige copiar os templates — eles são lidos diretamente da
vendor/pelo namespace. - Os assets JS/CSS precisam ser copiados porque o navegador não acessa
vendor/. - Os paths diferem por contexto: Symfony usa
assets/vendor/champs-frontend, legado usapublic/vendor/champs-frontend.
Licença
MIT — Beto Campoy