Receitas
Tradução automática
Esta página foi traduzida automaticamente do inglês e ainda não foi revisada por um falante nativo; correções são bem-vindas no GitHub. Se algo não bater, vale o original em inglês.
Receitas curtas, uma tarefa cada. Cada receita é uma pequena aplicação em examples/cookbook/ com a sua própria suíte quantum test: o código da página é importado dos arquivos testados, e o que ela mostra como resultado saiu de rodá-la.
Básico
- Uma primeira página, e uma segunda — Cada arquivo em components/ é uma página na sua própria URL; uma URL sem arquivo é 404.
- Variáveis e expressões — q:set guarda um valor, as chaves calculam com ele, e default preenche o que falta.
- Loops — q:loop sobre uma lista (com a posição), um intervalo de números e um texto separado por vírgulas.
- Condicionais — q:if, q:elseif e q:else, com condições que são expressões.
- Funções — Uma q:function com parâmetros tipados e verificados, chamada de um q:set e do HTML.
- Uma página por URL — components/product/[id].q responde em /product/1, /product/2...; o segmento é uma variável.
- Ler a query string — query.name lê o ?name= do endereço; default cobre um que falta; urlencode monta um link.
- Componentes reutilizáveis — Um componente com props e um slot, importado de uma pasta _ que nunca é servida.
Telas
- Um layout que cabe na tela — ui:hbox lado a lado numa tela larga, empilhado numa estreita, com grow, width e hide-below.
- Uma tabela editada no lugar — ui:table edit= transforma cada célula num pequeno formulário verificado contra o esquema da tabela; nenhuma ação a escrever.
- Abas — ui:tabpanel com uma ui:tab por seção de uma página.
- Cards — ui:card com cabeçalho, corpo e rodapé, num ui:grid; ou um card só com título.
- Todo tipo de campo — ui:form com rótulos ui:formitem: texto, número, uma seleção com opções, um switch, radios e um campo de várias linhas.
- A mesma página num terminal — Uma página ui:*, servida ao navegador pelo quantum start e desenhada num terminal pelo quantum console.
Testando a aplicação
- Um primeiro teste com quantum test — Teste uma página e a sua ação no próprio Quantum — visitar, enviar, conferir a mensagem flash, a tabela e o erro de campo.
- Dados de teste com test:given — Coloque no banco novo de um teste as linhas de que ele precisa com test:given, e entre como um usuário com test:as.
- Testar o que uma ação recusa — Teste os erros de campo, a regra de negócio e o sucesso de uma ação — error=, message=, flash= e a tabela.
Arquivos e e-mail
- E-mail em desenvolvimento — Envie e-mail de uma ação sem servidor de e-mail enquanto desenvolve — host: log grava cada mensagem no log.
- Quando o servidor de e-mail diz não — Mantenha um pedido mesmo quando o e-mail de confirmação não pode ser enviado — onerror=continue, e avise o visitante.
Login e permissões
- Login com senha em hash — Confira uma senha contra o seu hash bcrypt com verifyPassword, abra a sessão e mantenha uma página só para quem entrou.
- Cadastro com o hash da senha — Crie uma conta com hashPassword, para o banco nunca guardar a senha, com regras em cada campo.
- Uma página só para um papel — require_role reserva uma página aos administradores: um membro recebe 403, e quem não entrou é mandado para o login.
- Uma guarda que redireciona — Um q:if no topo com q:redirect protege uma página e cada ação dela: um envio sem sessão não grava nada.
- Sair — Uma página de logout que limpa a sessão e redireciona; as páginas protegidas se fecham de novo.
Formulários e ações
- Cada erro no seu campo — Escreva as regras uma vez no q:param da ação; o formulário as lê e mostra cada recusa ao lado do seu campo.
- Um formulário recusado guarda o que foi digitado — Depois de uma recusa, o formulário volta preenchido com os valores enviados, uma vez, para ninguém digitar uma mensagem longa duas vezes.
- Redirecionar e dizer o que aconteceu — Termine uma ação com q:redirect e uma mensagem flash; q:flash para um aviso; a mensagem aparece uma vez na próxima página.
- Vários formulários numa página — Cada formulário e botão envia o nome da sua ação; um nome que a página não tem responde 400.
- Um formulário a partir da tabela — q:action table= pega os seus parâmetros do esquema; um ui:form sem campos desenha um campo por coluna.
- Editar uma linha — Uma página por linha com [id].q, um formulário aberto com os valores da linha e as regras da tabela ao salvar.
- Confirmar antes de apagar — Uma página que pergunta primeiro, aberta por um link, e o apagar como POST pelo botão dela; sem JavaScript.
- Números e datas — type=integer, decimal e date no q:param: a ação recebe números verificados e datas de verdade, com min e max.
- Uma escolha numa lista — enum no q:param dá ao ui:select e ao ui:radio as suas opções e recusa qualquer outra; uma caixa é um boolean.
Dados e SQL
- Uma consulta com parâmetros — Filtre por um valor da URL, ligado como um q:param — o valor nunca vira SQL.
- Uma lista paginada — Uma página de uma lista longa por vez, com o ui:pager desenhando os links para as outras.
- Busca enquanto você digita — Um campo que atualiza os resultados a cada pausa na digitação — a própria consulta da página faz a busca.
- Filtrar e ordenar uma tabela — Links que filtram as linhas e cabeçalhos que as ordenam — os dois no SQL, os dois na URL.
- Escritas que acontecem juntas — Uma q:transaction: o débito, o crédito e a linha de registro são confirmados juntos, ou nenhum deles é.
- Histórico de mudanças — history: true registra quem mudou qual linha, e como; ui:history mostra isso na página.
- Acrescentar uma coluna com uma migração — Mude o esquema com um novo arquivo de migração; o antigo fica como estava.
- Ler um arquivo CSV — q:data transforma um CSV em registros tipados, filtrados e ordenados — sem banco de dados.
- Carregar um CSV numa tabela — Insira cada linha de um arquivo numa transação — uma linha que falha não deixa nada para trás.
- Ler um arquivo JSON — Um array JSON como uma lista de registros, com um campo calculado em cada um.
- Totais a partir de uma consulta — SQL sobre o resultado de uma consulta, em memória — o banco é consultado uma vez.
IA
- Respostas com as suas fontes — Responda perguntas a partir dos seus próprios documentos com q:knowledge e q:llm knowledge=, e liste as fontes.
- Quando os documentos não sabem — minRelevance deixa de fora os trechos que não têm relação; sem nenhum, o modelo não é chamado e a página diz isso.
- Transmitir uma resposta — Um q:llm transmitido e ui:stream: a página aparece na hora, e a resposta surge enquanto é escrita.
- Um agente sobre o seu banco de dados — q:agent com uma ferramenta de consulta só de leitura: o modelo escolhe a ferramenta e os argumentos, nunca o SQL.
- Quando o modelo falha — onerror no q:llm: um modelo fora do ar ou lento demais não derruba a página junto.
- Classificar mensagens com respostas em JSON — responseFormat json: a resposta do modelo é um objeto cujos campos você verifica e guarda.
- Respostas a partir de uma tabela — Uma fonte de q:knowledge que é uma consulta: as linhas da sua tabela de perguntas frequentes, recuperadas como documentos.