Scaffolding con KumbiaPHP – Modificando comportamientos y contenidos según nuestra necesidad

Vista index con categoría relacionada como texto

La entrega anterior hablamos acerca del uso de la técnica de Scaffolding para CRUD con KumbiaPHP. Espero que muchos se hayan sorprendido gratamente con la funcionalidad que ciertamente ahorra mucho trabajo rutinario, ya que es altamente flexible.

Para que se entusiasmen, dentro de las posibilidades  tenemos: reescribir métodos y modificar comportamientos en controladores, modificar los archivos de vista, e incluso puedes crear tus propios scaffoldings.
Pero bueno, vamos paso a paso.

Manos a la obra

Vamos a trabajar en base a supuestos. Supongamos que queremos mostrar el nombre de la categoría padre para aquellas categorías que estén anidadas.

Como se ve en la lista, las categorías relacionadas sólo se ven con su identificador.
Por lo tanto, vamos a modificar la fuente de datos que pasamos a la vista Index para que ésta pueda presentar los contenidos respectivos.

En el modelo

Lo que vamos a hacer es crear un método que cumpla con lo que queremos lograr: mostrar el contenido de la tabla de categorías incluyendo el nombre de la categoría padre en aquellas categorías que heredan de otra. De este modo tendremos una modificación como la siguiente:

Archivo: models/categorias.php

<?php

class Categorias extends ActiveRecord 
{

    function getCategorias($page = 1) 
    {
        return $this->paginate(
            'columns: categorias.id, categorias.nombre, cat.nombre as categorias_id, categorias.creada_at, categorias.actualizada_in', 
            'join: left outer join categorias cat on categorias.categorias_id = cat.id',
            "page: $page", 'order: categorias.id desc');
    }

}

En el controlador

El segundo cambio lo haremos desde el controlador, para cargar los cambios que hemos hecho en el modelo. Lo que reemplazaremos (porque es una sobre escritura de index en ScaffoldController) será la función index tal como se muestra a continuación.

Archivo: controllers/categorias_controller.php

<?php
class CategoriasController extends ScaffoldController
{
    public $model = 'categorias';

    public function index($page=1)
    {
        $this->data = (new Categorias)->getCategorias($page);
    }
 
}

Ahora se ve así

Con esto lograremos que el listado cumpla que el requerimiento solicitado.

¿Por qué funciona?

Como puede verse, con cambios mínimos hemos logrado adecuar la presentación de la vista index sin actualizar su archivo. Lo que hemos hecho principalmente es un reemplazo dentro de la metadata de ActiveRecord. Scaffolding espera contar con todos los atributos de la tabla de categorías (id, nombre, categorias_id, creada_at, actualizada_in). Nosotros hemos modificado la salida cambiando categorias_id por nombre desde categorias (nombre as categorias_id). Así hemos logrado que el pintador de la vista index haga su tarea sin enterarse del reemplazo que hemos hecho a nivel de modelo.

Bueno, eso es todo por esta semana. En la siguiente entrega veremos cómo modificar una vista particular para hacerla parecer según nuestros requerimientos.

Últimas recomendaciones

Recuerden que pueden revisar el código desde: https://github.com/nelsonrojas/Scaffold-KumbiaPHP

No olvides visitarnos en http://slack.kumbiaphp.com/ para contarnos cómo te va usando KumbiaPHP. Si necesitas apoyo procuraremos estar atentos. Además, si te gusta lo que escribimos compártelo ya mismo con tus amigos y colegas.

Saludos y larga vida a KumbiaPHP!

Con cariño desde Talca, Chile: @nelsonrojas

Ps: Si te perdiste lo que escribimos la semana pasada, puedes leerlo aquí: https://www.kumbiaphp.com/blog/2017/04/03/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte/


2 thoughts on “Scaffolding con KumbiaPHP – Modificando comportamientos y contenidos según nuestra necesidad”

  1. Muchas gracias por estos tutoriales, son super útiles. Yo voy a iniciar un aplicación web y lo haré con KumbiaPHP. ¿Podrían poner tutoriales de combinar KumbiaPHP con AJAX (agregar, editar y eliminar datos)?

  2. Hola Yader! muchas gracias por tu comentario. Bueno supongo que más adelante podremos hacer algo como lo que nos indicas, que de hecho es parte de lo que normalmente hacemos en nuestras aplicaciones. Saludos cordiales!

Deja un comentario

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

© Kumbia Team