Formulario para crear y editar un registro
¿Cómo implementar correctamente la creación y edición de un registro en Nette, utilizando el mismo formulario para ambas cosas?
En muchos casos, los formularios para añadir y editar un registro son iguales, diferenciándose únicamente por la etiqueta del botón. Mostraremos ejemplos de presentadores sencillos en los que utilizamos el formulario primero para añadir un registro, luego para editarlo y finalmente combinamos las dos soluciones.
Añadir un registro
Ejemplo de presentador utilizado para añadir un registro. Dejaremos el trabajo real de la base de datos a la clase
Facade
, cuyo código no es relevante para el ejemplo.
Editar un registro
Veamos ahora cómo sería un presentador utilizado para editar un registro:
En el método action, que se invoca justo al principio del ciclo de vida del presentador, verificamos la existencia del registro y el permiso del usuario para editarlo.
Almacenamos el registro en la propiedad $record
para que esté disponible en el método
createComponentRecordForm()
para establecer los valores por defecto, y recordFormSucceeded()
para el ID.
Una solución alternativa sería establecer los valores por defecto directamente en actionEdit()
y el valor del ID,
que forma parte de la URL, se recupera utilizando getParameter('id')
:
Sin embargo, y esto debería ser lo más importante de todo el código, necesitamos asegurarnos de que la acción es
efectivamente edit
cuando creamos el formulario. De lo contrario, la validación en el método
actionEdit()
no se realizaría.
El mismo formulario para añadir y editar
Y ahora combinaremos ambos presentadores en uno solo. Podríamos distinguir qué acción está implicada en el método
createComponentRecordForm()
y configurar el formulario en consecuencia, o podemos dejarlo directamente en manos de
los métodos de acción y deshacernos de la condición: