Conceitos

Ciclo de vida de uma requisição

Como uma requisição encontra sua rota, monta sua resposta e carrega só o que usa.

Toda requisição que não é um arquivo estático vai para o index.php. A partir daí o Nimbly encontra a rota do endereço, executa o template dela e carrega só os blocos que esse template chama.

1. Entrada

O servidor web entrega diretamente os assets compilados, os arquivos estáticos e as imagens redimensionadas. Todo o resto é reescrito para o index.php, que lê o caminho pedido, carrega as configurações do .env, aplica as configurações de proxy confiável e inicia as estatísticas de requisições. A entrada da requisição é escapada antes que qualquer template a veja.

2. Encontrando a rota

O caminho é procurado nesta ordem:

  1. Pasta de subdomínio. Num subdomínio como docs.example.com, a pasta ext/uri/(subdomain-docs)/ é tentada primeiro.
  2. Rota estática. Uma pasta cujo caminho é igual ao endereço, com um index.tpl: /about é ext/uri/about/index.tpl. Ela é encontrada diretamente; nenhuma tabela de rotas está envolvida.
  3. Rota dinâmica. Uma pasta com um segmento entre parênteses, como ext/uri/projects/(slug)/. O route.inc dela verifica os valores do endereço e chama router_accept() quando o endereço é válido. Senão, a próxima rota é tentada.
  4. Não encontrado. Uma página 404, que um projeto pode substituir pela sua própria ext/uri/errors/404/.

Em cada passo, ext/ é procurado antes de core/ e dos módulos. Uma rota sua com o mesmo caminho substitui uma rota do framework.

3. Montando a resposta

O index.tpl da rota é executado. Numa página HTML ele normalmente define algumas variáveis da página e termina com [#html#], a shell da página. A shell gera o head do documento, os header.tpl, main.tpl e footer.tpl da pasta da rota, e os scripts e ferramentas de edição para editores autenticados.

Uma rota pode muito bem produzir outra coisa: um documento HTML próprio e completo, JSON, XML, texto simples, uma exportação CSV ou um PDF. Veja Seu próprio HTML e O que uma rota devolve.

4. Só o que a rota usa

Os templates chamam shortcodes: [#data#], [#repeat#], [#site-header#], [#prepare-projects#]. Um shortcode é resolvido no momento em que é chamado. O Nimbly encontra o template ou a biblioteca pelo nome, em ext/ e depois em core/, e carrega nesse momento. Uma página sem formulários nunca carrega o código de formulários; uma página sem imagens nunca carrega o código de imagens.

Os dados funcionam do mesmo jeito. [#data projects#] lê o recurso de projetos pela camada de dados, que guarda resultados de consultas e índices de listas num cache invalidado a cada escrita. Uma página de detalhe busca um registro por um índice em vez de ler o recurso inteiro.

O resultado é que o trabalho de uma requisição segue o que a rota realmente usa, e não tudo o que o framework sabe fazer.

5. Acesso

As permissões são verificadas onde os dados são lidos ou alterados. O admin e a API verificam, a cada operação, a função do usuário autenticado ou o token da API. Nas suas próprias rotas, o route.inc valida o endereço, e um template ou uma biblioteca verifica o acesso antes de mostrar dados protegidos. Veja Usuários e permissões.

Ver esta página em Markdown