# 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](/pt/docs/guides/html-shell/) e [O que uma rota devolve](/pt/docs/guides/responses/).

## 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](/pt/docs/guides/permissions/).
