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:

CodeIgniter 4 Introducción a las rutas
Reactividad, Vue.js Composition API

Deja una respuesta

Your email address will not be published / Required fields are marked *