Crear ABM para todas las tablas en Yii2
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:
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:
Formulario de creación:
Vista:
Administración:
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!