Controladores en CodeIgniter 4

En esta ocasión, vamos a profundizar en los controladores de CodeIgniter 4, siguiendo la arquitectura MVC (Modelo-Vista-Controlador) de este framework. Si estás siguiendo nuestro curso, ya habrás visto que CodeIgniter organiza el desarrollo de aplicaciones web mediante esta estructura. Hoy, nos enfocaremos en los controladores, elementos clave para manejar las peticiones y coordinar las respuestas de nuestra aplicación.

¿Qué son los controladores en CodeIgniter 4?

Los controladores son componentes esenciales en la arquitectura MVC (Modelo-Vista-Controlador) de CodeIgniter 4. Se encargan de manejar las solicitudes entrantes, procesar la lógica de la aplicación y enviar la respuesta adecuada al cliente. En esencia, actúan como intermediarios entre las vistas (la interfaz de usuario) y los modelos (la capa de datos).

Preparación del Entorno

Para comenzar, asegúrate de tener un proyecto de CodeIgniter 4 instalado. En nuestro caso, hemos renombrado el proyecto a «almacén». Abre tu proyecto en un editor de código, como Visual Studio Code, y navega hasta la carpeta app/Controllers. Aquí encontrarás un archivo llamado Home.php, que es el controlador inicial de CodeIgniter.

Estructura de un Controlador

Los controladores en CodeIgniter son clases PHP que necesitan un namespace para su correcta ubicación. Generalmente, los nombres de las carpetas y archivos siguen una estructura específica:

<?php

namespace App\Controllers;

class Home extends BaseController
{
    public function index()
    {
        return view('welcome_message');
    }
}

En este ejemplo:

  • Definimos el namespace App\Controllers.
  • La clase Home extiende Controller, una clase base que proporciona funcionalidades esenciales.
  • La función index retorna una vista llamada welcome_message.

Herencia de BaseController

Para evitar la repetición de código, CodeIgniter utiliza una clase base llamada BaseController, que se encuentra en la misma carpeta app/Controllers. Esta clase hereda de Controller y agrega funcionalidades comunes que necesitarás en tus controladores.

<?php

namespace App\Controllers;

use CodeIgniter\Controller;
use CodeIgniter\HTTP\CLIRequest;
use CodeIgniter\HTTP\IncomingRequest;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;

/**
 * Class BaseController
 *
 * BaseController provides a convenient place for loading components
 * and performing functions that are needed by all your controllers.
 * Extend this class in any new controllers:
 *     class Home extends BaseController
 *
 * For security be sure to declare any new methods as protected or private.
 */
abstract class BaseController extends Controller
{
    /**
     * Instance of the main Request object.
     *
     * @var CLIRequest|IncomingRequest
     */
    protected $request;

    /**
     * An array of helpers to be loaded automatically upon
     * class instantiation. These helpers will be available
     * to all other controllers that extend BaseController.
     *
     * @var list<string>
     */
    protected $helpers = [];

    /**
     * Be sure to declare properties for any property fetch you initialized.
     * The creation of dynamic property is deprecated in PHP 8.2.
     */
    // protected $session;

    /**
     * @return void
     */
    public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
    {
        // Do Not Edit This Line
        parent::initController($request, $response, $logger);

        // Preload any models, libraries, etc, here.

        // E.g.: $this->session = \Config\Services::session();
    }
}

Aquí, se inicializan variables y helpers que pueden ser utilizados en los controladores que extienden BaseController.

Creación de un Nuevo Controlador

En CodeIgniter 4, la creación de controladores es un proceso sencillo. Basta con crear un nuevo archivo PHP en el directorio app/Controllers. Para crear un controlador llamado Productos, simplemente creamos un archivo Productos.php en ese directorio con el siguiente contenido:

<?php

namespace App\Controllers;

class Productos extends BaseController
{
    public function index()
    {
        echo "Controller Productos";
    }

    public function show()
    {
        return "Detalles del producto";
    }
}

Definición de Rutas

Las rutas en CodeIgniter 4 se configuran en el archivo app/Config/Routes.php. Aquí, podemos establecer las URL que apuntan a los métodos específicos de nuestros controladores. Por ejemplo, podemos configurar una ruta para acceder al método index() de nuestro controlador Productos. De esta manera, podemos acceder a los controladores y a sus métodos mediante URL específicas en nuestra aplicación web.

$routes->get('productos', 'Productos::index');
$routes->get('producto', 'Productos::show');

Estas líneas indican que cuando accedamos a /productos o /producto, CodeIgniter llamará a las funciones index y show de Productos respectivamente.

Resultado

/productos: Esta ruta llama a la función index del controlador Productos, que podría utilizarse para mostrar una lista de productos o realizar otras operaciones relacionadas con la gestión de productos en el sitio web.

/producto: Aquí, la ruta está configurada para llamar a la función show del mismo controlador Productos, la cual podría utilizarse para mostrar detalles específicos de un producto.

Guía en vídeo

Conclusión

Los controladores son esenciales en CodeIgniter 4 para manejar las operaciones y peticiones que realiza una URL. Hemos visto cómo crear y estructurar un controlador y definir rutas. En próximos artículos, exploraremos más a fondo cómo trabajar con vistas, modelos y rutas, maximizando el uso de los controladores en tus proyectos de CodeIgniter.

¡Mantente atento a las próximas lecciones para continuar mejorando tus habilidades en este potente framework!