Helpers - Ayudantes

Los ayudantes (Helpers), como su nombre sugiere, nos ayudan con las tareas. Cada archivo helper es simplemente una colección de funciones en una categoría particular, hay URL Helpers, que ayudan a crear enlaces, hay Form Helpers que ayudan a crear elementos de formulario, Text Helpers que realizan varias rutinas de formateo de texto, Cookie Helpers que configuran y leen cookies, File Helpers que ayudan a manejar archivos, etc.

A diferencia de la mayoría de los otros sistemas en CodeIgniter, los Helpers no están escritos en un formato orientado a objetos, son simples funciones de procedimiento, cada función auxiliar realiza una tarea específica, sin dependencia de otras funciones.

CodeIgniter no carga archivos auxiliares de forma predeterminada, por lo que el primer paso para usar un Helper es cargarlo, una vez cargado, se vuelve disponible globalmente en su controlador y vistas.

Los helpers normalmente se almacenan en el directorio system/helpers, o en application/helpers, CodeIgniter buscará primero en el directorio application/helpers, si el directorio no existe o el asistente específico no está ubicado allí, CodeIgniter buscará en el directorio system/helpers/.

Cargar un Helper

Cargar un helper es bastante simple usando el siguiente método:

$this->load->helper('nombre');

Donde 'nombre' es el nombre de archivo del helper, sin la extensión de archivo .php o la parte "helper".

Por ejemplo, para cargar el archivo URL Helper, que se llama url_helper.php, haríamos esto:

$this->load->helper('url');

Un helper puede cargarse en cualquier lugar dentro de los métodos del controlador, o incluso dentro de los archivos de vistas, aunque no es una buena práctica, siempre que lo cargue antes de usarlo, puede cargar sus helpers en el constructor de su controlador para que estén disponibles automáticamente en cualquier método, o puede cargar un helper en un método específico que lo necesite.

Nota

El método de carga del helper de arriba no devuelve un valor, por lo tanto, no intente asignarlo a una variable, solo úsalo como se muestra.

Cargando múltiples helpers

Si necesitas cargar más de un helper, puedes especificarlos en un array, como este:

$this->load->helper(
    array('helper1', 'helper2', 'helper3')
);

Carga automática de helpers

Si encuentras que necesitas disponer de un helper globalmente en toda la aplicación, puedes indicarle a CodeIgniter que lo cargue automáticamente durante la inicialización del sistema, esto se hace abriendo el archivo application/config/autoload.php y agregando el helper al array de autocarga.

Usar un helper

Una vez que hayas cargado el helper que contiene la función que quieres usar, lo llamarás como lo harías con una función PHP estándar.

Por ejemplo, para crear un enlace usando la función anchor() en uno de los archivos de vista, harías esto:

<?php echo anchor('blog/comentarios', 'Clic aquí');?>

Donde "Clic aquí" es el nombre del enlace, y "blog/comentarios" es el URI al controlador/método que deseas enlazar.

"Extender" los Helpers

Para "extender" los Helpers, tenemos que crear un archivo en el directorio application/helpers/ con un nombre idéntico al helper existente, pero con el prefijo MY_ (este elemento es configurable. Ver más abajo).

Si todo lo que necesitas hacer es agregar alguna funcionalidad a un Helper existente, tal vez agregar una función o dos, o cambiar la forma en que funciona un helper en particular, entonces es excesivo reemplazar el asistente completo con su versión, en este caso, es mejor simplemente "extender" el Helper.

Nota

El término "extender" se usa de manera vaga porque las funciones de Helper son procedimentales y discretas y no se pueden extender en el sentido programático tradicional, internamente, esto le da la capacidad de agregar o reemplazar las funciones que proporciona un Helper.

Por ejemplo, para extender el Array Helper nativo, crea un archivo llamado application/helpers/MY_array_helper.php y agrega o anula funciones:

// any_in_array() no está en Helper Array, por lo que define una nueva función
function any_in_array($needle, $haystack)
{
    $needle = is_array($needle) ? $needle : array($needle);
    foreach ($needle as $item)
    {
        if (in_array($item, $haystack))
        {
            return TRUE;
        }
    }
    return FALSE;
}

// random_element() está incluido en Helper Array, por lo que anula la función nativa
function random_element($array)
{
    shuffle($array);
    return array_pop($array);
}

Establecer nuestro propio prefijo

El prefijo de nombre de archivo para "extender" Helpers es el mismo usado para extender librerías y clases principales.

Para configurar nuestro propio prefijo, abrimos el archivo application/config/config.php y buscamos este elemento:

$config['subclass_prefix'] = 'MY_';

Ten en cuenta que todas las librerías nativas de CodeIgniter llevan el prefijo CI_ por lo que NO lo uses como tu prefijo.

Mas adelante veremos qué hacen cada uno de los helpers que vienen con CodeIgniter.