Controllers en CodeIgniter

  • Por
  • PHP
Qué son los controladores -controllers en inglés- en el modelo MVC y en concreto en el framework PHP CodeIgniter, cómo crearlos y utilizarlos para generar las páginas de un sitio.
Los controladores son uno de los componentes que forman parte del modelo de programación MVC (Modelo - Vista - Controlador o Model - View - Controller en inglés) que sirven como engranaje principal a la hora de crear aplicaciones web. Dado que CodeIgniter utiliza la arquitectura MVC, tendremos que aprender a manejar y dominar los controladores como un primer paso para comenzar a trabajar con este framework PHP.

Para los que no sepan qué es el MVC cabe decir que ya fue explicado en este manual de CodeIgniter, concretamente en el capítulo Modelo - Vista - Controlador en CodeIgniter. Así que podemos pasar directamente a explicar las particularidades de los controladores en este entorno de programación.

Para explicar los controladores voy a basarme en la propia documentación del framework PHP, que está tutorializada, como ya dijimos en la introducción a CodeIgniter. Por lo que resulta una manera excelente para aprender a dar los primeros pasos en el desarrollo de aplicaciones.

Qué es un controlador

Un controlador en CodeIgniter es un archivo que contiene el código de una clase, de programación orientada a objetos, que colocamos en un directorio específico del esquema de carpetas de nuestro sitio. Tiene un nombre cualquiera, que se asociará con una URL de nuestra aplicación web.

Por ejemplo, esta podría ser una URL de nuestra aplicación:

midominio.com/index.php/articulos

En la URL anterior podemos ver que la palabra "artículos" determina la página que queremos ver dentro de nuestra aplicación. Pues bien, para poder atender esta solicitud nosotros vamos a tener que crear un archivo llamado articulos.php (el controlador) dentro del directorio que aloja los controladores de nuestra aplicación.

Por tanto, cuando CodeIgniter detecta una URL como esta, intentará acceder al archivo articulos.php, para cargarlo, procesarlo y de ese modo mostrar la página con los contenidos de esta sección.

Cuando ese controlador no se encuentre entre los archivos de controladores de CodeIgniter, simplemente se mostrará un error 404 de página no encontrada. Si se encontró el controlador, como se decía, se carga y se procesa para mostrar la página.

Los controladores en CodeIgniter se guardan en la carpeta "system/application/controllers/", que se encuentra dentro de los archivos de CodeIgniter.

Nota: Todos los archivos que vamos a tener que crear o editar para desarrollar nuestra aplicación PHP con CodeIgniter están dentro de la carpeta "system/application" y existe una carpeta dentro para cada tipo de cosa que deseemos crear o modificar, como archivos de configuración, modelos, vistas, etc.

Creando un primer controlador en CodeIgniter

Para empezar a programar en CodeIgniter vamos a crear un primer controlador, llamado artículos, que simplemente mostrará un mensaje de bienvenida para saber que todo está funcionando correctamente.

El código de este primer controlador será el siguiente:

<?php
class Articulos extends Controller {

   function index()
   {
      echo 'Bienvenido a mi primer controlador en CodeIgniter';
   }
}
?>

Este archivo lo tenemos que guardar como "articulos.php" en la carpeta "system/application/controllers/". Caben señalar unos detalles importantes:

  • En nombre del archivo de controlador, en este caso articulos.php, va en minúsculas.
  • El nombre de la clase que implementa el controlador se tiene que llamar igual que el nombre del archivo, pero fijaros que tiene obligatoriamente la primera letra en mayúscula. Por eso aparece como class Articulo extends Controller.
  • Todos los controladores tienen que extender la clase "Controller" (que también tiene la primera letra "C" en mayúscula), que está creada dentro de CodeIgniter y en principio no necesitamos modificarla para nada.

Una vez creado el archivo, podemos acceder con el navegador al controlador, con una URL como esta:

http://localhost/index.php/articulos

Nota: Esta URL supone que has instalado CodeIgniter en la raíz de tu servidor web, pero podrías haber instalado CodeIgniter en otro directorio, en tal caso la URL tendría una forma como http://localhost/directorio_de_codeigniter/index.php/articulos

En caso que esté funcionando todo correctamente, tendrás que visualizar una página con el mensaje que habías colocado en el echo que hay dentro de la función index() del controlador. Si no funciona, comprueba tu URL, que tiene acceder al directorio correcto donde hayas instalado CodeIgniter y que tiene que acabar con el nombre del controlador en minúsculas. Comprueba también que la clase que has creado en el código del controlador tiene la primera letra en mayúscula. No debe haber mucho problema ni dificultad.

En el siguiente artículo veremos cómo podemos crear funciones en los controladores, para dar lugar páginas distintas que dependan del mismo controlador.

Controlador por defecto

Pero, antes de acabar el presente artículo, quiero hablar sobre el controlador por defecto, que es el que se invoca en CodeIgniter cuando no se especifica ningún nombre de directorio y por tanto ningún controlador, en la siguiente URL:

midomino.com/index.php/

O bien en esta otra:

midominio.com/

Esto, que sería la home de la aplicación CodeIgniter, y eventualmente la home del dominio, si es que hemos instalado el framework en la raíz del directorio de publicación, invoca también un controlador, que es el controlador por defecto.

El nombre del controlador predeterminado (Default Controller) puede ser variable, siendo el desarrollador el encargado de configurarlo en uno de los archivos de configuración de CodeIgniter, que se encuentra en el fichero "application/config/routes.php".

En ese archivo simplemente tenemos que buscar el valor $route['default_controller'] y asignarle el nombre de la clase donde está el controlador que queramos que se invoque. Como es el nombre de una clase de un controlador tendremos que escribirlo con la primera letra en mayúscula.

$route['default_controller'] = 'Articulos';

Si observamos el valor de esta variable de configuración, tal como está en el momento inicial, después de la instalación de CodeIgniter, veremos que el controlador por defecto está en la clase "Welcome", archivo application/controllers/welcome.php

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

Distriker

19/3/2010
Estupendo
Estupendo, es bastante fácil la creación de controladores, al menos estos básicos jajaja.

Saludos

jose_lakatos

23/3/2010
Mayusculas o minusculas
Buenas,hasta ahora tenia claro que cuando se definia la clase que hacia referencia al controlador se escribía con la primera letra em mayusculas,pero al mirar el fichero de configuracion routes.php de mi local me he dado cuenta que viene inicialmente como:

$route['default_controller'] = "welcome";

es decir llamando al controlador en minusculas,En el articulo se dice que debe ser la primera letra en mayusculas,¿Es estrictamente encesario que esto sea así?

Muchas gracias y enhorabuena por este estupendo tutorial

juandecon

21/10/2010
CodeIgniter
Creo que se refiere al archivo, que es welcome.php. Pero pareced que no es necesario ponerle la extensión.

Basic82

01/4/2011
Error de clase Controller
En CodeIgniter 2.0.1 parece que la clase Controller fue cambiada por CI_Controller. Verifiqué en la ruta system/core/ donde están las clases del CI y no existe la clase Controller implementada, en su lugar la CI_Controller.

Manuel Robla

17/4/2011
Actualización Code Igniter
En las nueva versión de CodeIgniter para definir el controladro la sintaxis es diferente, en lugar de "extends Controller" es "extends CI_Controller".

Codify

19/4/2011
Problema con Controller
Resulta que poniendo el extends Controller me dá el error de que no encuentra la clase Controller.
Si pongo extends CI_Controller si que funciona bien...que estoy haciendo mal?

Calitrunks

04/9/2011
CI_Controller
En las ultimas versiones de Codeigniter no se usa Controllers, pues la clase es CI_Controllers

wVrFfFPGrQt

17/12/2011
oVoMOBOuolETcuIrpP
I much prefer informative articles like this to that high brow litertuare.

yfmartinez09

09/1/2012
sobre CI_Controller
lo que pasa es eso mismo en las versiones 2.0 en adelante se usa CI_Controller en vez de Controller...

asi de sencillo..

un muy buen framework...

saludos a todos desde Cuba..

Rafa

18/3/2012
Error en el ejemplo de primer Controlador
Buenas, solo decir que con la nueva versión de Codegneiter en concreto la 2.1.0 se debe añadir _CI al crear el controlador, es decir en el ejemplo de primer controlador sería así:
<?php
class Articulos extends CI_Controller {

function index()
{
echo 'Bienvenido a mi primer controlador en CodeIgniter';
}
}
?>
Puede encontrar más información aquí:
http://stackoverflow.com/questions/3631657/codeigniter-php5-fatal-error-class-controller-not-found

Un saludo y gracias por el manual.

Matías

28/8/2012
codeigniter
por lo que probe es indistinto poner la primera letra en mayuscula o minuscula en el route

lal036

20/12/2012
aprendiendo
Hola,
Estoy siguiendo el curso, es la primera vez que trabajo con framework, hasta el momento todo bien.
Saludos

Juan Pablo

10/3/2013
Error 404
Error 404, no comprendo muy bien por que me dio el error debido a que estoy iniciado, me note que el archivo welcome.php en lugar de class Articulos extends Controller { aparecia asi
class Articulos extends CI_Controller {

Entonces solo cambie Controller por CI_Controller y el problema se soluciono.

<?php
class Articulos extends CI_Controller {

function index()
{
echo 'Bienvenido a mi primer controlador en CodeIgniter';
}
}
?>

Alvaro_Aponte

20/3/2013
Felicitaciones, Gracias y Solicitud de Ayuda
Buenas Noches! Felicidades por el manual y Gracias ha sido de muy buena ayuda.

Tengo tiempo programando en PHP y estoy iniciandome en esto de la POO en PHP. Estoy familiarizado con los terminos y el manejo en C# pero estoy iniciando en PHP. Estoy leyendo y siguiendo todo el manual de CodeIgniter pero en esta primera prueba me arroja el siguiente error: Fatal error: Class 'Controller' not found in C:Program FileswampwwwframeworkCodeIgniterapplicationcontrollersarticulos.php on line 3

Ah por cierto: la carpeta system ya no contiene la carpeta application por lo que deben actualizar las rutas en la parte de instalación.

Dani

29/7/2014
extends Controller
Para que funcione correctamente el "extends Controller" hay que poner: "extends CI_Controller" ya que sin el CI_ da error. ¡Saludos!

OASM

06/12/2016
cambio al CI_Controller y aun me da error
cambio al CI_Controller y aun me da error, debo cambiar el nombre en el route?

ulik

24/1/2018
ruta del archivo cambio de carpeta
Este archivo lo tenemos que guardar como "articulos.php" en la carpeta "system/application/controllers/".
En las ultimas versiones cambia a:
"nombre_carpetaapplicationcontrollers