ScaffoldController: Modificando vistas

Hasta aquí hemos invertido tiempo en revisar el uso básico del ScaffoldController con KumbiaPHP creando nuestros CRUDs de forma rápida, modificando el estilo de las vistas (al añadir un nuevo conjunto de vistas que cargan mediante la variable de controlador $scaffold), y reemplazando comportamientos particulares para modificar el conjunto de datos (al reescribir el método index).

Nueva meta u objetivo usando ScaffoldController

Este post tiene por objetivo hacer un resumen de lo que ya hemos visto en las entregas anteriores, y sacar aún más partido al uso de scaffolding con nuestro framework, de tal manera que puedas aplicar los conceptos que se describen en otras situaciones y así buscar mantener el principio DRY: No te repitas.

En sí, el uso de Scaffolding es una declaración clara del principio DRY, pues lo usamos para no tener que copiar y pegar comportamientos que son inherentes a diferentes situaciones: como crear, actualizar, eliminar y listar registros de una tabla (a modo de ejemplo, podríamos crear controladores scaffolding o heredables para otras tareas que no sean siempre la gestión de datos en tablas).

A modo de añadir más fuerza al principio, los frameworks de desarrollo web se han creado basándose primariamente en dicha idea: escribir lo necesario, evitando repetir comportamientos, y por ende se disminuye el número de líneas de código, el nivel de errores y, por ende, el tiempo de desarrollo y mantenimiento de los sistemas o aplicaciones creados con ellos.

Por eso es que existe una clasificación de carpetas: para controladores, modelos, vistas, ayudantes (helpers), librerías particulares, y librerías externas (vendors).

Si necesita comprender más los conceptos básicos de nuestro framework puede ver Kumbia Essentials.

Manos a la obra

Como ya se mencionó, un scaffolding es una estrategia para no repetir código que se usa en labores comunes. Hasta aquí lo hemos usado para tener un CRUD de la tabla que representa las categorías, y también nos ha permitido sobrescribir la forma en que hacemos la presentación de la acción index (listar los registros de la tabla).

Ahora iremos un poco más lejos

  1. Modificaremos la vista particular de la acción index.
  2. Sobrescribiremos nuestro controlador para modificar el comportajmiento al guardar y actualizar los registros.

El cliente nos pide modificar la visualización de la lista de categorías para quitar de ella los atributos de fecha y renombrar el atributo nombre y categorías por Nombre Categoría y Categoría Padre. También nos solicita modificar el comportamiento de la acción crear para que el formulario aparezca limpio para agregar nuevamente, en vez de viajar a index una vez enviado el formulario.

De igual forma debe hacerse para que la acción editar recargue el formulario modificado en vez de viajar a index. Iremos de lo fácil a lo menos fácil.

Modificaremos el comportamiento de crear, y editar en nuestro controlador.

Para esto copiaremos el método crear desde ScaffoldController (app/libs/scaffold_controller.php) y lo pegaremos en nuestro controlador de categorias (app/controllers/categorias_controller.php)

Deberíamos tener algo como lo que muestra la siguiente figura:

ScaffoldController: Controlador Categorías con reemplazo del método Crear

Luego modificamos el comportamiento para quitar la redirección a index, y limpiar el contenido de Input::post(‘modelo’) para que el formulario permanezca en blanco y así nos permita agregar un nuevo elemento.

Eliminaremos la redirección desde la línea 21. Luego incluiremos la limpieza del post en la línea 19 con la instrucción Input::delete().

Con estos breves cambios deberíamos contar con lo siguiente:

ScaffoldController: Controlador de Categorías con eliminación de redirección predeterminada

Repetiremos el procedimiento en el método editar. Iremos al controlador ScaffoldController, y desde él copiaremos el método editar y lo pegaremos bajo el método crear del controlador de categorías. Deberíamos tener algo como la siguiente figura:

ScaffoldController: Controlador de Categorías con reemplazo del método editar

Para cambiar el comportamiento de redirección, quitaremos la parte de la condición else que aparece en entre las líneas 47 a 49, para lograr esto:

ScaffoldController: Controlador de Categorías con eliminación de redirección en el método editar

Con estas modificaciones el método crear nos permitirá seguir creando categorías cada vez que presionemos Enviar. En el método editar tendremos siempre disponible el último cambio realizado en la categoría.

Modificando vistas

Modificaremos la vista index estándar. Para ello crearemos una nueva vista index dentro de app/views/categorias. El archivo debe ser llamado como index.phtml.

La estructura de archivos del proyecto debería verse así:

ScaffoldController: Listado de directorios y archivos para la nueva vista index del controlador de categorías

Copiaremos el contenido de la vista index del scaffolding, la que está en app/views/_shared/scaffolds/kumbia/index.phtml

Quitaremos los atributos de fecha y renombraremos las columnas de nombre y de categoría padre. La vista nos debería quedar más o menos así:

ScaffoldController: Contenido de la nueva vista index para el controlador de categorías en reemplazo de la vista básica de scaffold

Al ejecutar el acceso a la vista deberíamos lograr algo similar a la siguiente figura:

ScaffoldController: Vista de navegador para el reemplazo de la vista index en el controlador de categorías

Pero nuestro cliente necesita que la categoría padre quede expresada con el nombre, no con su código de referencia.

Entonces, lo que haremos finalmente es modificar el método index y el modelo que enlaza la tabla categorías de la siguiente forma, comenzando por el modelo (app/models/categorias.php):

ScaffoldController: Actualización del método que carga los registros de la tabla de categorías para incluir la categoría padre con su nombre

Modificamos la consulta para dotar a la paginación de la referencia al nombre de la categoría padre usando los parámetros columns y join.

En nuestro controlador de categorías modificaremos el método index para que pueda usar esta nueva paginación, quedando el resultado como se ve a continuación:

ScaffoldController: Reemplazo del método index en el Controlador de Categorías para usar el nuevo método getCategorias desde el modelo

Finalmente el resultado de la vista index se verá como lo presenta la siguiente figura:

ScaffoldController: Vista del método index con Categoría padre como nombre

Hasta aquí llega la publicación dedicada al tema del scaffolding, pero antes de terminar haremos un resumen hasta aquí.

Resumen

En este episodio hemos modificado el comportamiento del método crear sobrescribiendo el método base del controlador Scaffold, también hemos modificado el comportamiento para editar, y para index.

Hemos agregado un vista personalizada para la acción index, y aún así seguimos usando ScaffoldController.

Sólo nos restará por tarea crear nuestro propio Scaffold para poder mantener el principio DRY usando los comportamientos sin redirección para el método crear y editar.

Un abrazo cordial a nuestros colegas y a los que han de venir,

@nelsonrojas


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

© Kumbia Team