CodeIgniter 4 Rutas:Uso de marcadores.
CodeIgniter 4 nos proporciona la posibilidad de definir las rutas de nuestra aplicación a nuestra conveniencia haciendo uso de marcadores a la hora de especificar una ruta. Esto permite enviar y recibir parámetros a través de la URL de manera controlada y segura.
Tipos de Rutas en CodeIgniter 4
CodeIgniter 4 cuenta con dos tipos principales de enrutamiento:
- Enrutamiento de Ruta Definida: Permite definir rutas específicas que están enlazadas a métodos de controladores.
- Enrutamiento Automático: Permite que el sistema determine la ruta basada en los segmentos de la URL automáticamente.
En este tutorial, nos enfocaremos en el Enrutamiento de Ruta Definida y el uso de marcadores.
Definir Rutas con Marcadores
Para definir una ruta en CodeIgniter 4, usamos el archivo Routes.php
ubicado en el directorio app/Config
. Aquí podemos crear una instancia de la clase RouteCollection
($routes) y definir nuestras rutas con marcadores.
Ejemplo de Ruta con Marcador Numérico
$routes->get('miruta/(:num)','Micontrolador::miMetodo/$1');
En este ejemplo:
Micontrolador::miMetodo/$1
define el controlador y método que manejará la solicitud, pasando el parámetro capturado.
miruta
es la vista a la que queremos acceder.
(:num)
es un marcador que indica que el parámetro es un número entero.
Ejemplo Práctico
Paso 1: Crear el Controlador
En el directorio app/Controllers
, creamos un archivo Micontrolador.php
:
<?php
//usamos el espacio de nombre Controllers
namespace App\Controllers;
class Micontrolador extends BaseController
{
//creamos un metodo que recibira un parametro en este caso $parametro.
public function miMetodo($parametro)
{
//creamos un array $data con el parametro recibido.
$data['parametro']=$aparametro;
//retornamos nuestra vista junto al array $data que creamos.
return view('miVista',$data);
}
}
Paso 2: Crear la Vista
En el directorio app/Views
, creamos un archivo miVista.php
:
<!DOCTYPE html>
<html>
<head>
<title>CodeIgniter</title>
</head>
<body>
<h3>El parametro >
<?php
//imprimimos el parametro que recibimos desde nuestro controlador
echo $parametro;
?>
</h3>
</body>
</html>
Paso 3: Definir la Ruta
En app/Config/Routes.php
, añadimos:
$routes->get('miruta/(:num)','Micontrolador::miMetodo/$1');
Paso 4: Probar la Ruta
En el navegador, ingresamos la siguiente URL:
http://localhost/ci/public/miruta/2
Esto debería mostrar el valor del parámetro en la vista.

Uso de Múltiples Marcadores
Ejemplo con Dos Parámetros Numéricos
$routes->get('miruta/(:num)/(:num)','Micontrolador::miMetodo/$1/$2');
Controlador:
public function miMetodo($p1,$p2)
{
//creamos un array $data con los dos parametros.
$data['p1']=$p1;
$data['p2']=$p2;
//retornamos nuestra vista junto al array $data que creamos.
return view('miVista',$data);
}
URL
http://localhost/ci/public/miruta/2/2
Tipos de Parámetros
Parámetros Alfabéticos
Pasar parámetro como cadena de caracteres alfabéticos seria de la siguiente forma
$routes->get('miruta/(:alpha)','Micontrolador::miMetodo/$1');
URL:
http://localhost/ci/public/miruta/joe
Parámetros Alfanuméricos
Pasar parámetro como cadena de caracteres alfanuméricos seria de la siguiente forma
$routes->get('miruta/(:alphanum)','Micontrolador::miMetodo/$1');
URL
http://localhost/ci/public/miruta/parametro1
Combinando tipos de parámetros
podemos definir mas de un tipo de parámetro al crear una ruta, por ejemplo
$routes->get('miruta/(:alpha)/(:num)','Micontrolador::miMetodo/$1/$2');
URL
http://localhost/ci/public/miruta/joe/123
Uso de Expresiones Regulares
Existe la posibilidad de que al definir las rutas deseamos especificar de manera mas exacta el tipo de parámetro, por ejemplo
$routes->get('miruta/(^[0-9_]+$)','Micontrolador::miMetodo/$1');
Especificamos en la ruta que se aceptara un parámetro que solo contenga enteros y guion bajo, de esta forma se puede ser mas especifico, otro ejemplo
$routes->get('miruta/(^[a-zA-Z0-9_]+$)','Micontrolador::miMetodo/$1');
En este ejemplo definimos que el parámetro debe ser alfanumérico que contenga caracteres alfabéticos,enteros y guion bajo.
Definir Marcadores Propios
CodeIgniter nos ofrece la posibilidad de definir nuestros propios marcadores que se adapten a la necesidades de la aplicación.
Ejemplo parctico
Definimos nuestro marcador de la siguiente manera usando el método addPlaceholder()
$routes->addPlaceholder('miMarcador','\w+');
Definimos nuestra ruta usando el marcador que ya definimos anteriormente
$routes->get('miruta/(:miMarcador)','Micontrolador::miMetodo/$1');
Uso del Marcador :any
Es el marcador permite enviar múltiples parámetros y de distinto tipo a la vez, por ejemplo podríamos necesitar información de un producto por marca,color,tamaño de la siguiente forma
http://localhost/ci/public/producto/abc/azul/mediano
Podemos observar a la palabra producto como la ruta y lo que sigue después de la barra diagonal son los parámetros que recibirá el controlador abc/azul/mediano.
Por ejemplo crearemos una ruta que con el método :any procesaremos con nuestro controlador los parámetros recibidos para luego mostrarlos en la vista en el siguiente ejemplo.
Paso 1.
En nuestro controlador creamos el método showProducto()
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
class Micontrolador extends BaseController
{
public function showProducto($marca=false,$color=false,$tamano=false)
{
//Retornamos nuestra vista.
$data['marca']=$marca;
$data['color']=$color;
$data['tamano']=$tamano;
return view('miVista',$data);
}
}
?>
Paso 2.
Editamos nuestra vista de la siguiente forma
<!DOCTYPE html>
<html>
<head>
<title>CodeIgniter</title>
</head>
<body>
<?php
echo '<h3>marca='.$marca.'</h3>';
echo '<h3>color='.$color.'</h3>';
echo '<h3>tamaño='.$tamano.'</h3>';
?>
</body>
</html>
Paso 3.
Definiendo la ruta de la siguiente manera en nuestro archivo Routes.php
$routes->get('producto/(:any)',Micontrolador::showProducto/$1);
Paso 4.
Probando en el navegador colocamos la url de la siguiente forma
http://localhost/ci/public/producto/abc/azul/mediano
Obtendremos en nuestro navegador el siguiente resultado

Podríamos escribir la url de esta forma y igual funcionaria porque el marcador :any permite el envió de múltiples parámetros a la vez podrían ser 1,2 o 3 parámetros, permitiendo ademas que sean de diferente tipo, por ejemplo alfabéticos, alfanuméricos o enteros.
http://localhost/ci/public/producto/abc/123/456
Como podemos observar cuando escribimos las url en nuestro navegador luego de la palabra producto enviamos 3 parámetros separados por una barra diagonal “/” los cuales recibe nuestro controlador en el método showProducto() retornando la vista y los parámetro que le brindamos a través de la url
Pero y si solo le enviamos 2 parámetros de la siguiente manera?
http://localhost/ci/public/producto/abc/azul/
Obtendríamos el siguiente resultado en el navegador,porque al definir los parámetros como false en el método showProducto() podemos enviar 1,2 o 3 parámetros y nuestra aplicación seguirá funcionando

Prueba al enviar solo un parámetro
http://localhost/ci/public/producto/abc/
El resultado seria el siguiente

Como podemos observar funciona aunque solo enviemos un parámetro.
Lista de Argumentos de Longitud Variable
Se puede pasar una lista de argumentos dinámica, siendo que necesitemos pasar un numero indeterminado de parámetros a nuestra función.
modificando el método showProducto() de la forma
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
class Micontrolador extends BaseController
{
public function showProducto(...$parametros)
{
$data['parametros']=$parametros;
return view('miVista',$data);
}
}
?>
Modificando nuestra vista de la forma
<!DOCTYPE html>
<html>
<head>
<title>CodeIgniter</title>
</head>
<body>
<?php
foreach($parametros as $parametro){
echo '<h3>Parametro => '.$parametro.'</h3>';
}
?>
</body>
</html>
Ponemos a prueba en nuestro navegador
Escribimos en nuestro navegador la siguiente url
http://localhost/ci/public/producto/abc/azul/mediano
Obteniendo el siguiente resultado:
