GET /blog/2017/04/12/scaffolding-con-kumbiaphp-modificando-comportamientos-y-contenidos-segun-nuestra-necesidad
ScaffoldController: Modificando comportamientos y contenidos
La entrega anterior hablamos acerca del uso de la técnica de Scaffolding para CRUD con KumbiaPHP usando la clase ScaffoldController. 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 con ScaffoldController
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);
}
}






