Aplicação web com Laravel

Rotas, controladores, modelos e vistas para recursos REST apoiados na base de dados.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Percurso e responsabilidades

O navegador apresenta a página; Nginx ou Apache recebe HTTP; PHP/Laravel executa a aplicação; PostgreSQL guarda os dados. O servidor pode devolver ficheiros estáticos sem executar a aplicação.

PeçaResponsabilidade
RotaMétodo e endereço escolhem a operação.
MiddlewareVerificações transversais, como autenticação e CSRF.
ControladorCoordena o caso de uso e a resposta.
Policy ou GateAutoriza pessoa, operação e objeto.
Modelo e serviçoDados, relações e regras de negócio.
Vista BladeProduz representação HTML; uma API pode devolver JSON.

Autenticação identifica; autorização permite operar; validação testa formato e domínio. auth não concede acesso a qualquer bilhete.

Criar uma sessão

// Excerto de controlador, com Gate e Sessao importados.
Gate::authorize('create', Sessao::class);
$dados = $request->validate([
    'evento_id' => 'required|exists:eventos,id',
    'data_hora' => 'required|date|after:now',
    'preco' => 'required|numeric|min:0',
    'lotacao' => 'required|integer|min:1',
]);
Sessao::create($dados);
return redirect('/sessoes', 303);

Este excerto pressupõe a policy associada ao modelo e os campos de data e preço configurados. O formulário usa @csrf, @error e old(...). A validação devolve campos validados, sem os tornar seguros para todos os destinos: continua a escapar na vista e a mapear escolhas como ordenação.

FalhaRecusa
Sem loginauth, normalmente redirecionando o formulário.
Sem permissãoPolicy, 403.
Lotação zeroValidação, erros e valores preservados; normalmente 422 para JSON.
Evento eliminado depois de validarFK ainda recusa a escrita.

A validação amigável não substitui FK, CHECK ou coordenação concorrente. DB::transaction(...) agrupa escritas, mas não resolve sozinho a corrida de capacidade.

Modelo, migração e vista

Migrações versionam o esquema. Mantém CHECKs de preço e lotação em PostgreSQL. Configura $table = 'sessoes'; pluralização inglesa não garante os nomes portugueses. Declara $timestamps = false se o esquema não tiver esses campos.

$fillable limita atribuição em massa, não autoriza pessoas. belongsTo(Evento::class) representa a relação da sessão com evento. Na vista, {{ ... }} escapa texto HTML; {!! ... !!} imprime sem essa proteção.

N+1 pode fazer uma consulta de 40 sessões e mais 40 pelos eventos: 41 consultas. Sessao::with('evento')->get() agrupa o carregamento antecipado. Mede consultas e transferência antes de antecipar todas as relações.

Login, PHP e ambiente

Auth::attempt recebe a palavra-passe em claro para verificar o hash; regenera a sessão após sucesso. Adapta provider e modelo se o esquema usar palavra_passe_hash em vez de password.

Variáveis de funções PHP são locais. global liga à global; arrow functions capturam por valor; closures usam use ($x) ou use (&$x). Com $taxa=3, criar fn($n) => $n+$taxa e depois mudar taxa para 8 conserva 3 na captura.

Imagem Docker é a base para criar contentores; contentor é uma instância; volume conserva dados além da camada descartável. Recriar um contentor não equivale a apagar o volume.

Modelo, vista e controlo de acesso.

Protótipo vertical

Implementa um percurso através de interface, contrato HTTP, autorização, regra de negócio e dados persistidos. Dados fixos e uma mensagem de sucesso não demonstram esse percurso.

No cancelamento de uma reserva: A2 define a história, A3 os estados visíveis, A4–A6 os dados e garantias, A7 o contrato e A8 integra a funcionalidade. Confirma que a alteração persiste ao recarregar, que repetir não liberta outro lugar e que o pedido direto de outra pessoa é recusado sem alterações.

Histórias obrigatórias e ambiente de entrega vêm da edição atual. Um caso didático completo não cobre sozinho todos os requisitos do protótipo.

Percurso e verificações.

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.