Capítulo 27
Symfony: entidades e formulário
2 min de leitura 385 palavras 1 gravura
Neste capítulo você vai persistir recados com entidade e formulário. O projeto-fio é o Ateliê Boa Viagem, ateliê digital fictício em Boa Viagem, Recife.
Seu ponto de partida
Use o exemplo 27-symfony-entidades do pacote anexo e copie inicio/ para uma pasta de prática fora do original. A raiz do exemplo é a referência completa desta etapa.
Use servidor só em 127.0.0.1 quando o README do exemplo pedir HTTP local. Abrir ou testar não publica nada.
Como praticar
Leia → copie ou digite → mude uma coisa → preveja → salve → recarregue → confira. Restaure cada experiência antes da próxima. Faça as atividades antes de abrir as respostas comentadas.

Entidade Recado
Campos autor, mensagem, criadoEm. SQLite ou Doctrine conforme o exemplo enxuto.
Faça na sua cópia
Confira o trecho no contexto do exemplo antes de mudar.
class Recado {
private ?int $id = null;
private string $autor = '';
private string $mensagem = '';
}
Mude uma coisa e preveja
Limite mensagem a 500 caracteres na validação.
Anote o que espera observar antes de salvar e recarregar.
Recarregue e confira
Mensagem longa é rejeitada.
Se não acontecer
Assert/constraints no exemplo.
FormType
Formulário Symfony gera campos e CSRF.
Faça na sua cópia
Confira o trecho no contexto do exemplo antes de mudar.
$form = $this->createForm(RecadoType::class, $recado);
Mude uma coisa e preveja
Torne autor obrigatório.
Anote o que espera observar antes de salvar e recarregar.
Recarregue e confira
Submit vazio falha.
Se não acontecer
handleRequest + isValid.
Twig escapa por padrão
{{ recado.mensagem }} não renderiza HTML cru. Mantenha assim.
Faça na sua cópia
Confira o trecho no contexto do exemplo antes de mudar.
<li>{{ recado.autor }}: {{ recado.mensagem }}</li>
Mude uma coisa e preveja
Mostre a data formatada.
Anote o que espera observar antes de salvar e recarregar.
Recarregue e confira
Data legível.
Se não acontecer
Filtro date no Twig.
Atividades
Atividade 1
O que uma entidade representa?
Atividade 2
CSRF vem ligado nos forms Symfony?
Atividade 3
Pode imprimir HTML cru da mensagem?
Respostas comentadas
Resposta da atividade 1
Objeto de domínio persistido.
Resposta da atividade 2
Sim, no fluxo padrão de forms.
Resposta da atividade 3
Não no estudo; mantenha escape.
O arquivo completo
Referência do exemplo 27-symfony-entidades, reproduzida aqui para que você possa conferir sem sair da página.
src/Entity/Recado.php
<?php
// Entidade conceitual do curso
class Recado {
public ?int $id = null;
public string $autor = "";
public string $mensagem = "";
}