Formulário para a criação e edição de um registro
Como implementar corretamente a adição e edição de um registro em Nette, usando o mesmo formulário para ambos?
Em muitos casos, os formulários para adicionar e editar um registro são os mesmos, diferindo apenas pela etiqueta no botão. Vamos mostrar exemplos de apresentadores simples onde usamos o formulário primeiro para adicionar um registro, depois para editá-lo e, finalmente, combinar as duas soluções.
Adicionando um registro
Um exemplo de um apresentador usado para adicionar um registro. Deixaremos o trabalho real do banco de dados para a classe
Facade
, cujo código não é relevante para o exemplo.
Edição de um registro
Agora vamos ver como seria um apresentador usado para editar um registro:
No método ação, que é invocado logo no início do ciclo de vida do apresentador, verificamos a existência do registro e a permissão do usuário para editá-lo.
Armazenamos o registro na propriedade $record
para que esteja disponível no método
createComponentRecordForm()
para definir os padrões, e recordFormSucceeded()
para a identificação.
Uma solução alternativa seria definir os valores padrão diretamente em actionEdit()
e o valor do ID, que faz
parte da URL, é recuperado usando getParameter('id')
:
Entretanto, e esta deve ser ** a retirada mais importante de todo o código***, precisamos ter certeza de que a ação é de
fato edit
quando criamos o formulário. Porque senão a validação no método actionEdit()
não
aconteceria de forma alguma!
O mesmo formulário para adicionar e editar
E agora vamos combinar os dois apresentadores em um só. Ou podemos distinguir qual ação está envolvida no método
createComponentRecordForm()
e configurar a forma de acordo, ou podemos deixá-la diretamente com os métodos de
ação e nos livrarmos da condição: