Crear ABM para todas las tablas en Yii2

Publicado por Andrea Navarro en

La creación de ABM es fundamental para manejar los datos de la base de manera visual. Aunque Yii permite la creación automática de modelos, controladores y vistas a través de la extensión gii si la base tiene una gran cantidad de tablas el proceso puede tardar mucho. Más si tenemos en cuenta que una vez creados los ABM en ocasiones es necesario modificarlos para cambiar el formulario de inserción, modificar la manera de buscar u ordenar los datos o para el caso de claves foráneas.

En este artículo veremos como crear un comando de Yii que al ejecutarse cree los ABM para todas las tablas que encuentre en la base de datos a la que está conectada.

Requisitos previos

  • Tener instalado el framework Yii2
  • Tener una base de datos Mysql con tablas creadas (con o sin datos)
  • Conectar Yii con la base de datos
  • Tener instalado Composer

En este caso utilizaremos una base de datos con tablas vacias:

Base de datos para realizar ABM

Instalar extensiones

Para crear los ABM instalamos dos extensiones utilizando composer.

Instalar Gii para generar modelos y ABM para las tablas de la base de datos

composer require --dev --prefer-source yiisoft/yii2-gii

Instalar la extensión yii2-console-runner para permitir ejecutar comandos de consola yii desde la aplicación

composer require toriphes/yii2-console-runner "*"

Crear comando de consola

Para que un archivo se pueda ejecutar por consola creamos un archivo que extienda de la clase Controller.

Crear archivo GenerarController.php en /commands/

<?php
  namespace app\commands;
  use Yii;
  use yii\console\Controller;
  use toriphes\console\Runner;
  class GenerarController extends Controller
  {
    public function actionIndex()
    {
       //Obtengo conexion a la db
       $connection = Yii::$app->db;
       $dbSchema = $connection->schema;
       //Obtengo todas los nombres de las tablas
       $tables = $dbSchema->getTableNames();
     //Recorro las tablas
     foreach($tables as $tbl)
     {
       //Coloco la primera letra de el nombre de la tabla en mayúscula
       $nombre= ucfirst ($tbl);
       //Instancio la clase
       $runner = new Runner();
       //Creo el modelo
       $runner->run('gii/model --tableName='.$tbl.' --modelClass='.$nombre, $salida);
       echo $salida;
       //Creo el ABM
       $runner->run('gii/crud --enableI18N=1 --modelClass="app\models\\'.$nombre.'" --controllerClass="app\controllers\\'.$nombre.'Controller"',$salida);
       echo $salida;
     }        
    }
  }

Crear AMB

Una vez creado el archivo es posible ejecutar el comando:

./yii generar

Esto creará los siguientes archivos

En /models

Mascotas.php
Personas.php
Productos.php

En /controllers

MascotasController.php
PersonasController.php
ProductosController.php

En /views se crearán las siguientes carpetas

mascotas/
personas/
productos/

Para acceder a cada uno de los ABM:

ruta/web/index.php?r=mascotas
ruta/web/index.php?r=personas
ruta/web/index.php?r=productos

Aquí puede verse el ABM creado para la tabla personas:

ABM creado

Formulario de creación:

Creación ABM

Vista:

vista ABM

Administración:

admin ABM

Aunque, como se ha mencionado antes, es muy posible que sean necesarias modificaciones en el modelo, controlador o vistas este comando es una buena opción cuando se quiere comenzar la programación de una aplicación a partir de una base de datos ya creada o diseñada, sobre todo cuando la cantidad de tablas es elevada.

Espero que les sirva!


¿Preguntas? ¿Comentarios?

Si tenés dudas, o querés dejarnos tus comentarios y consultas, sumate al grupo de Telegram de la comunidad JuncoTIC!
¡Te esperamos!

Categorías: Programación

Andrea Navarro

- Ingeniera en Informática - Docente universitaria - Investigadora