CodeIgniter

Ejemplo de controlador en CodeIgniter 3

Introducción

Acabamos de ver cómo crear y usar un modelo en el framework CodeIgniter. Veamos ahora un ejemplo de cómo se usan los controladores en CodeIgniter. Vamos a definir un controlador y ver cómo se invoca.

Un controller se usa como pegamento entre el modelo y la vista. También se usa para conectar los datos que pone al usuario con la base de datos, a través del modelo.

Por ejemplo, reciben datos de un formulario y los pasan al modelo, dependiendo del resultado le devuelven un mensaje al usuario.

Más tutoriales de CodeIgniter

Aquí una pequeña lista:

Ubicación y nomenclatura de los controladores

Los controladores van en la carpeta application/controllers. Heredan de la clase CI_Controller y normalmente tienen un nombre amigable que se relaciona a veces con una entidad.

Por ejemplo, podemos tener el controller Productos, el cual gestionaría productos (valga la redundancia) a través del modelo ProductoModel.

Pero también podemos tener el controlador Vender, el cual no se relaciona con una entidad (tal vez se relacionaría si se llamara Ventas) pero es un controlador, y sirve para gestionar algunas cosas como el proceso de venta de un producto, el cual no se relaciona directamente con un modelo pero genera vistas o se encarga de algo.

Recordemos finalmente que un controller lleva el nombre de la clase que define. Es decir, si el nuestro se llama Vender, el archivo se llama Vender.php.

Llamada a los controladores

Los controladores son llamados a través de la URL, por eso es que digo que deben tener nombres amigables y no raros, para tener algo expresivo.

Esto lo logramos cargando el ayudante para url en el archivo config/autoload.php en donde dice algo como:

$autoload['helper'] = array();

Simplemente indicamos que queremos cargar el helper de url:

$autoload['helper'] = array('url');

Y listo. Más tarde accedemos a los controladores así:

rutadetuproyecto.com/index.php/nombreDelControlador/

Funciones del controlador

Técnicamente un controlador es una clase, y define funciones o métodos. Estos métodos pueden ser invocados a través del navegador.

Arriba mostramos una forma de acceder al controlador, pero eso sólo permitiría llamar a la función index (ver más abajo la explicación), pero para llamar a una función simplemente ponemos su nombre después de una diagonal que va delante del nombre del controlador.

Por ejemplo, si tenemos la función todas dentro del controlador Ventas (esto quiere decir que queremos obtener todas las ventas), la URL queda así:

rutadetuproyecto.com/index.php/ventas/todas

Obviamente debemos definir la función en el controlador, si no, esto generará un error 404.

Argumentos

Las funciones reciben argumentos a veces. Por ejemplo, una función llamada detalle dentro de nuestro controlador de ventas podría recibir un id como argumento. Algo así:

<?php
public function detalle($id){
# Magia aquí
}

El helper de la url se encarga de parsear la url y llamar a la función con los datos adecuados. La ruta para invocar a nuestra función quedaría así:

rutadetuproyecto.com/index.php/ventas/detalle/1

En ese caso el argumento $id tendría el valor de 1. Y ya con eso podemos llamar a nuestro modelo y pasarle el ID.

La función index

Arriba mostramos cómo acceder a una función definida por el controlador, ¿pero qué pasa si no ponemos el nombre de la función y sólo ponemos el nombre del controlador? por ejemplo, esta ruta:

rutadetuproyecto.com/index.php/ventas/

Ahí indicamos que queremos el controlador Ventas, pero no indicamos método.

CodeIgniter ya sabe manejar esto, y cuando no pasamos el nombre de ninguna función entonces llama a la función index dentro de nuestro controlador.

Esa función debe estar definida en nuestro controlador, la mayoría de veces carga la vista inicial. Si no la definimos sólo se muestra un error 404.

Cargar modelos

Un controlador se comunica con modelos la mayoría de veces. Para cargar un modelo hacemos esto dentro de cualquier función:

<?php
$this->load->model("NombreDelModelo");

# Ahora accedemos a él
$this->NombreDelModelo->algunMetodo();

Igualmente podemos hacerlo dentro del constructor. En el siguiente ejemplo cargamos al modelo VentaModel.

<?php
public function __construct(){
    parent::__construct();
    $this->load->model("VentaModel");
}

Nota: si defines el constructor, asegúrate de llamar al constructor del padre primero como se ve en el ejemplo de arriba con parent::_construct();

Por cierto, también podemos cargar librerías con $this->load->library("nombreDeLibrería");

Renderizar vistas

Esto es lo que la mayoría de veces hacen nuestros controladores. Para cargar una vista usamos esto:

$this->load->view("encabezado");

Podemos, por ejemplo, cargar el encabezado, el cuerpo y el pie. Así:

<?php
$this->load->view("encabezado");
$this->load->view("ventas/todas", $datos);
$this->load->view("pie");

En ese caso le pasamos datos a la vista llamada todas.php dentro de la carpeta ventas. Por cierto, no debemos especificar el nombre de la vista si es que es PHP; si tiene otro formato, sí es necesario.

De esta manera separamos vistas y también las reutilizamos.

La variable $datos es un arreglo de datos que serán desempacados dentro de la vista. En la vista podremos acceder a ellos.

Redireccionar

En nuestro controlador, gracias al ayudante url podemos redireccionar. Para ello llamamos a la función redirect. Aquí un ejemplo:

redirect("ventas/");

Ahí, se hace una redirección a:

ruta.com/index.php/ventas/

Así podemos poner datos en la sesión para avisar de algo, y luego redireccionar; pero eso es otra historia.

Conclusión

Eso y más podemos hacer con nuestros controladores, pero espero que este ejemplo haya servido.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.