• Ir al contenido principal

Angel Aparicio

Programador especializado en PHP / Wordpress

  • Sobre mí
  • Blog
  • ¡Contacta!

admin / 7 noviembre, 2020

El patrón MVC en CodeIgniter

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

  1. Instancia la clase TasksModel
  2. Llama a la función getTasks para obtener la lista de tareas
  3. 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.

Patron mvc codeigniter

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»

Codeigniter aplicacion basica

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.

¿Necesitas un Programador CodeIgniter? ¡Contacta conmigo!

Archivado en:Curso Codeigniter

  • (CC) Ángel Aparicio
  • Blog
  • Twitter
  • GitHub
  • Programador CodeIgniter

Utilizamos cookies para darte la mejor experiencia en nuestra web.

Puedes informarte más sobre qué cookies estamos utilizando o desactivarlas en los AJUSTES.

Resumen de privacidad
Angel Aparicio

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.

Cookies de terceros

Esta web utiliza Google Analytics para recopilar información anónima tal como el número de visitantes del sitio, o las páginas más populares.

Dejar esta cookie activa nos permite mejorar nuestra web.

¡Por favor, activa primero las cookies estrictamente necesarias para que podamos guardar tus preferencias!

Política de cookies

Más información sobre nuestra política de cookies