Trabajar con la línea de comandos dentro de un framework como Yii permite ejecutar lógica de negocio sin depender de un navegador. Con los commands puedes leer archivos, operar datos y preparar el terreno para funcionalidades más robustas como el acceso a modelos y bases de datos. A continuación se explican los puntos esenciales que se cubren al crear y ejecutar comandos propios.
¿Qué son los commands en Yii y por qué son útiles?
Los commands son controladores diseñados para ejecutarse desde la terminal [0:30]. Mientras que un controller convencional responde a peticiones web, un command responde a invocaciones en la línea de comandos. Ambos comparten arquitectura: extienden de la misma clase base Controller, utilizan acciones (actions) y pueden recibir parámetros.
Yii incluye de fábrica un HelloController dentro de la carpeta commands [1:00]. Este ejemplo contiene una función actionIndex que recibe un mensaje con un valor por defecto ("Hello World") y lo imprime en pantalla. Al ejecutar yii hello en la terminal, se invoca automáticamente la acción index porque es la acción por defecto del controlador [1:40].
¿Cómo crear un comando personalizado paso a paso?
Para construir un comando propio basta con crear un archivo PHP en la carpeta commands respetando la convención de nombres en camelCase [2:20].
Estructura básica del controlador
- El namespace debe coincidir con
app\commands.
- Se importa
yii\console\Controller y yii\console\ExitCode.
- La clase extiende de
Controller.
El ExitCode representa el código de salida del programa, un estándar en sistemas Unix que indica si la ejecución terminó correctamente o con error [2:50].
Acción de suma con parámetros
Se define actionSuma recibiendo dos operandos, $a y $b [3:05]. La función calcula la suma, imprime el resultado con printf y retorna ExitCode::OK.
php
public function actionSuma($a, $b = 17)
{
$result = $a + $b;
printf("Result: %.2f\n", $result);
return ExitCode::OK;
}
Si se ejecuta yii platzi/suma sin argumentos, el framework responde con un mensaje claro: "Missing required arguments: a" [4:50]. Esto demuestra cómo Yii valida automáticamente los parámetros obligatorios.
Sobrecarga de parámetros y valores por defecto
Asignar un valor por defecto a $b convierte ese parámetro en opcional [6:10]. Esta técnica se conoce como sobrecarga de operadores a nivel de lenguaje PHP y resulta muy práctica tanto en commands como en modelos y funciones internas de la aplicación.
Documentación con docblocks
Yii lee los bloques de documentación estándar de PHP (los comentarios /** */) y los muestra como descripción en el menú de ayuda de la terminal [4:05]. Documentar cada acción con una línea descriptiva permite que cualquier miembro del equipo entienda qué hace el comando sin revisar el código fuente.
¿Cómo leer un archivo CSV desde un comando?
Una acción llamada actionBooks recibe la ruta de un archivo como parámetro y lo procesa línea por línea [7:20].
php
public function actionBooks($file)
{
$f = fopen($file, 'r');
while (!feof($f)) {
$data = fgetcsv($f);
print_r($data);
}
fclose($f);
return ExitCode::OK;
}
fopen abre el archivo en modo lectura.
feof verifica si se alcanzó el final del stream.
fgetcsv interpreta cada línea como valores separados por comas y devuelve un arreglo.
fclose cierra el recurso; olvidar este paso puede causar fugas de memoria.
Al ejecutar yii platzi/books books.csv, la terminal muestra cada registro del archivo, incluyendo título, autor y datos adicionales de cerca de doscientos libros [8:30].
Esta lectura se resuelve en apenas tres o cuatro líneas, lo que demuestra que, aunque se instaló un framework completo, la simplicidad del código para tareas puntuales se mantiene intacta. La verdadera potencia aparecerá al conectar estos comandos con el modelo y la base de datos, tema que se aborda en la siguiente sesión.
¿Ya probaste crear tus propios comandos? Comparte en los comentarios qué acciones te gustaría automatizar desde la terminal.