Seguimos con este curso gratuito de CodeIgniter 4 que empezamos con como hacer la instalación del mismo. Ahora veremos como funciona el patrón MVC, algo imprescindible para trabajar con este framework.
El patrón MVC
El patrón MVC es uno de los patrones más usado en arquitectura de software. Las siglas significan Modelo-Vista-Controlador y tiene como objetivo separar el código correspondiente a la lógica de funcionamiento (Modelo) de la visualización (Vista), así de como la conexión entre una y otra (Controlador)
Veamos un ejemplo. Estamos desarrollando una aplicación para gestión de tareas y queremos hacer un código para visualizar las tareas programadas en el sistema. Si lo hicieramos a «lo bruto», sin usar patrones de arquitectura de software, tendríamos un fichero en el que nos conectaríamos a la base de datos y después mostraría los resultados. Todo esto en una misma archivo PHP.
Aunque en principio esto pueda parecer una manera rápida de programar, a larga acabaremos con un código enrevesado, con fragmentos de código repetido y difícil de mantener. Si queremos tener dos maneras de acceder a los datos (desde la web y desde una API) pues acabaremos con el acceso a base de datos duplicado en varios archivos.
Usando el patrón MVC tendremos el código de acceso en un único sitio, el modelo. Después una vista por cada modo de visualización. Y para acabar un controlador que conecte ambos
Veamos como funciona esto en Codeigniter
El patrón MVC en CodeIgniter
Si entramos en la carpeta app de nuestra instalación de CodeIgniter veremos una serie de carpetas, entre ellas tres carpetas llamadas Controllers, Models y Views. Estas carpetas son la base del patrón MVC.
Para nuestro ejemplo inicial vamos a hacer lo siguiente:
- Un modelo Tasks que devuelva una lista de tareas
- Una vista que muestre una tabla con dichas tareas
- Un controlador que una ambas cosas
Modelo básico
Empecemos con el modelo. Para ello crearemos un archivo llamado TasksModel.php dentro de la carpeta Model. Tendrá el siguiente código:
<?php namespace App\Models;
use CodeIgniter\Model;
class TasksModel extends Model
{
public function getTasks(){
$tasks = array(
array( 'id' => 1, 'name' => 'Tarea 1', 'description' => 'Una tarea complicada'),
array( 'id' => 2, 'name' => 'Tarea 2', 'description' => 'Otra tarea, algo más sencilla'),
);
return $tasks;
}
}
Se trata de una clase llamada TasksModel que extiende la clase Model propia de CodeIgniter. De momento tiene una única función que devuelve una lista de tareas. En este ejemplo la lista está puesta a mano, más adelante veremos como obtenerla de una base de datos.
Por convención, es recomendable que la clase se llame con un nombre en plural (Tasks) seguido de la palabra Model
Con esto ya tenemos un modelo básico. Vayamos ahora al controlador.
Controlador básico
La función del controlador será llamar a la función getTasks del modelo y pasar el resultado a la vista correspondiente. En una aplicación MVC bien diseñada el controlador no debería tener demasiado código, pues toda la lógica debería estar en los modelos y toda la capa de representación en las vistas.
Nuestro controlador sería así. Tendremos que crear un fichero Tasks.php dentro del carpeta Controllers
<?php namespace App\Controllers;
use App\Models\TasksModel;
use CodeIgniter\Controller;
class Tasks extends Controller
{
public function index()
{
$model = new TasksModel();
$data['tasks'] = $model->getTasks();
echo view('tasks/index', $data);
}
}
Aquí tenemos una sola función, index. Esta función hace tres cosas
- Instancia la clase TasksModel
- Llama a la función getTasks para obtener la lista de tareas
- Pasa el resultado a la vista tasks/index
Lo único propio de CodeIgniter en este codigo es la función view. A esta función le pasamos la vista a usar (task/index en este caso) y un array que tendrá las variables que usará la vista. En este caso nuestra vista tendrá a su disposición la variable $tasks, con los datos devueltos por getTasks
Veamos ahora la vista
Vista básica
Como en el controlador hemos llamado a la vista tasks/index tendremos que crear una carpeta tasks dentro de la carpeta views y dentro de esta carpeta una carpeta index.
Siguiendo todo lo hecho hasta ahora, la estructura del proyecto debería ser la siguiente.

El contenido de este fichero index.php será simplemente recorrer el array de tareas y mostrarlo en una tabla. Recuerda que el listado de tareas lo tenemos disponible en la variable $tasks, que hemos pasado desde el controlador a la vista.
<table width="500px">
<tr>
<th>Id</th>
<th>Name</th>
<th>Description</th>
</tr>
<?php foreach ($tasks as $task): ?>
<tr>
<td><?php echo $task['id']; ?></td>
<td><?php echo $task['name']; ?></td>
<td><?php echo $task['description']; ?></td>
</tr>
<?php endforeach; ?>
</table>
Si todo está correcto, deberíamos ver el resultado accediendo a esta dirección: http://localhost:8080/tasks/index/ (recuerda poner en marcha el servidor con «php spark serve»

Conclusiones
En este capítulo hemos visto como funciona de manera básica el patrón MVC en Codeigniter. En el siguiente capítulo ahondaremos en algunas cuestiones más, como las rutas y el uso un poco más avanzado de las vistas.