De forma predeterminada, las direcciones URL de CodeIgniter están diseñadas para ser compatibles con motores de búsqueda y humanos. En lugar de utilizar el enfoque estándar de “cadena de consulta” para las URL, que es sinónimo de sistemas dinámicos, CodeIgniter utiliza un enfoque basado en segmentos :

https://example.com/news/article/my_article

De esta forma, sus URL se pueden definir utilizando la función de enrutamiento de URI con flexibilidad. Para ello, la Biblioteca de URI y el Ayudante de URL contienen funciones que facilitan el trabajo con sus datos de URI.

Estructura de URL de CodeIgniter

La URL base contiene solo el nombre de host. En este caso, cuando tenga la URL base:
https://www.example.com/
E imagine la siguiente URL:
https://www.example.com/blog/news/2022/10?page=2

Usamos los siguientes términos:

URL base https://www.ejemplo.com/
ruta URI /blog/noticias/2022/10
Ruta /blog/noticias/2022/10
Consulta página=2

La contención de subcarpetas en la URL base

Al tener la URL base:
https://www.example.com/ci-blog/
E imaginar la siguiente URL:
https://www.example.com/ci-blog/blog/news/2022/10?page=2

Usamos los siguientes términos:

URL base https://www.ejemplo.com/ci-blog/
ruta URI /ci-blog/blog/noticias/2022/10
Ruta /blog/noticias/2022/10
Consulta página=2

Eliminando el archivo index.php

De forma predeterminada, el archivo index.php se incluirá en sus URL:

example.com/index.php/news/article/my_article

Si su servidor admite la reescritura de URL, puede eliminar fácilmente este archivo con la reescritura de URL. Por su parte, los diferentes servidores manejan esto de manera diferente. No obstante, aquí mostraremos ejemplos de los dos servidores web más comunes.

Servidor Web Apache

Apache debe tener habilitada la extensión mod_rewrite. En el caso de tenerla, puede usar un .htaccess archivo con algunas reglas simples. Concretamente, aquí hay un ejemplo de un archivo de este tipo, el cual utiliza el método “negativo” en el que todo se redirige, a excepción de los elementos especificados:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

En este ejemplo, cualquier solicitud HTTP que no sea para directorios y archivos existentes se trata como una solicitud para su archivo index.php.

NGINX

En este caso, NGINX puede definir un bloque de ubicación y usar la directiva para obtener el mismo efecto que obtuvimos con la configuración de Apache anterior:

location / {
try_files $uri $uri/ /index.php$is_args$args;
}

Esto primero buscará un archivo o directorio que coincida con el URI (construyendo la ruta completa a cada archivo a partir de la configuración de las directivas raíz y alias), y luego envía la solicitud al archivo index.php junto con cualquier argumento.

URL de CodeIgniter: Funciones auxiliares

Los ayudantes, como sugiere su nombre, ayudan con las tareas. Cada archivo de ayuda es simplemente una colección de funciones en una categoría particular.

Hay ayudantes de las siguientes categorías:

  • De URL: ayudan a crear enlaces.
  • De formulario: ayudan a crear elementos de formulario.
  • Ayudantes de texto: realizan varias rutinas de formateo de texto.
  • De cookies: configuran y leen cookies.
  • Ayudantes de archivos: ayudan a manejar archivos.
  • Entre otros.

A diferencia de la mayoría de los otros sistemas relacionados con la URL de CodeIgniter, los ayudantes no están escritos en un formato orientado a objetos. En su lugar, son funciones simples, procedimentales. Cada función auxiliar realiza una tarea específica, sin depender de otras funciones.

CodeIgniter no carga archivos auxiliares de forma predeterminada, por lo que el primer paso para usar un auxiliar es cargarlo. Una vez cargado, estará disponible globalmente en su controlador y vistas. Los ayudantes generalmente se almacenan en su directorio system/Helpers o app/Helpers.

Asimismo, CodeIgniter buscará primero en su directorio app/Helpers. Si el directorio no existe o el ayudante especificado no se encuentra allí, este buscará en su sistema global/directorio de ayudantes.

Cargando un ayudante

Cargar un archivo de ayuda es bastante simple usando el siguiente método:

<?php

helper('name');

¿Dónde está el nombre de archivo del asistente, sin la extensión de archivo “ .php ” o la parte “ _helper ”? Por ejemplo, para cargar el archivo Cookie Helper, que se llama cookie_helper.php, haría lo siguiente:

<?php

helper('cookie');

Si necesita cargar más de un ayudante a la vez, puede pasar una serie de nombres de archivo y todos se cargarán:

<?php

helper(['cookie', 'date']);

Se puede cargar un ayudante en cualquier lugar dentro de los métodos de su controlador (o incluso dentro de sus archivos de vista, aunque no es una buena práctica), siempre que lo cargue antes de usarlo. Puede cargar sus ayudantes en el constructor de su controlador para que estén disponibles automáticamente en cualquier función, o puede cargar un ayudante en una función específica que lo necesite.

Carga desde ubicaciones no estándar

Los ayudantes se pueden cargar desde directorios fuera de app/Helpers y system/Helpers, siempre que esa ruta se pueda encontrar a través de un espacio de nombres que se haya configurado dentro de la sección PSR-4 del archivo de configuración de Autoloader. Prefijaría el nombre del Ayudante con el espacio de nombres en el que se puede ubicar.

Dentro de ese directorio con espacio de nombres, el cargador espera que viva dentro de un subdirectorio llamado Ayudantes. Un ejemplo ayudará a entender esto. Para este ejemplo, suponga que hemos agrupado todo nuestro código relacionado con el nlog en su propio espacio de nombres; por ejemplo, \Blog.

Los archivos existen en nuestro servidor en /Modules/Blog/. Entonces, colocaríamos nuestros archivos auxiliares para el módulo de blog en /Modules/Blog/Helpers/. Un archivo blog_helper estaría en /Modules/Blog/Helpers/blog_helper.php. Dentro de nuestro controlador, podríamos usar el siguiente comando para cargar el asistente por nosotros:

<?php

helper('Example\Blog\blog');

Usando un ayudante

Una vez que haya cargado el archivo de ayuda que contiene la función que pretende usar, lo llamará como lo haría con una función estándar de PHP. Por ejemplo, para crear un enlace utilizando la función en uno de sus archivos de vista, haría lo siguiente:

<div>
<?= anchor('blog/comments', 'Click Here') ?>
</div>

Ahí está el nombre del enlace y es el URI del controlador/método al que desea enlazar: Click Here, blog/comments

Ayudantes “que se extienden”

Para “extender” los Ayudantes, cree un archivo en su aplicación /Ayudantes/ carpeta con un nombre idéntico al del Ayudante existente.

Si todo lo que necesita hacer es agregar alguna funcionalidad a un asistente existente, tal vez agregar una o dos funciones, o cambiar la forma en que opera una función auxiliar en particular, entonces es una exageración reemplazar el asistente completo con su versión. En este caso, es mejor simplemente “extender” el Ayudante.

Por ejemplo, para extender el Array nativo, se creará un archivo llamado app/Helpers/array_helper.php y agregará o anulará funciones:

<?php

// any_in_array() is not in the Array Helper, so it defines a new function
function any_in_array($needle, $haystack)
{
$needle = is_array($needle) ? $needle : [$needle];

foreach ($needle as $item) {
if (in_array($item, $haystack, true)) {
return true;
}
}

return false;
}

// random_element() is included in Array Helper, so it overrides the native function
function random_element($array)
{
shuffle($array);

return array_pop($array);
}

El método escaneará todos los espacios de nombres PSR-4 definidos en app/Config/Autoload.php y cargará TODOS los ayudantes coincidentes con el mismo nombre. Esto permite que se carguen los ayudantes de cualquier módulo, así como cualquier ayudante que haya creado específicamente para esta aplicación. El orden de carga es el siguiente:

  1. app/Helpers: los archivos cargados aquí siempre se cargan primero
  2. {namespace}/Helpers: todos los espacios de nombres se repiten en el orden en que se definen
  3. system/Helpers: el archivo base se carga en último lugar.

Procedimiento

En la Tabla de contenido, encontrará una lista de todos los Ayudantes disponibles. Explore cada uno para ver lo que hacen.

Funciones y constantes globales

CodeIgniter proporciona algunas funciones y variables que se definen globalmente y están disponibles para usted en cualquier momento. Estos no requieren la carga de bibliotecas o ayudantes adicionales.

Accesorios de servicio

Parámetros: $key ( cadena ): el nombre de la memoria caché del elemento que se recuperará de la memoria caché (opcional)
Devoluciones: El objeto de la memoria caché o el elemento recuperado de la memoria caché
Tipo de retorno: Mezclado

Si no se proporciona la clave $, se devolverá la instancia del motor de caché. Ahora bien, si se proporciona una $clave, se devolverá el valor de $clave tal como está almacenado en la memoria caché actualmente. (O será nulo si no se encuentra ningún valor). Ejemplos:

<?php

$foo = cache('foo');
$cache = cache();

Esto se utiliza para recuperar valores que se han establecido previamente en el entorno o devolver un valor predeterminado si no se encuentra. A su vez, dará formato a los valores booleanos a booleanos reales en lugar de representaciones de cadenas.
Esto puede resultar especialmente útil cuando se usa junto con archivos .env con el fin de establecer valores que son específicos del entorno en sí. Algo así como en la configuración de la base de datos, las claves API, etc.

Escapes de datos para incluirlos en páginas web, para ayudar a prevenir ataques XSS. Esto utiliza la biblioteca Laminas Escaper para manejar el filtrado real de los datos.
Si $data es una cadena, simplemente se escapa y la devuelve. Si $data es una matriz, entonces se repite, escapando de cada ‘valor’ de los pares clave/valor. Valores de contexto válidos: html, js, css, url, attr.