Diseño web y programación

Con el foco en php, laravel y geolocalización

Crear un archivo helpers.php en laravel 5.2

Crear un archivo helpers.php en laravel 5.2

Normalmente, cuando creamos un proyecto con Laravel, echamos de menos la opción de crear un archivo con funciones de ayuda, las cuales puedan ser llamadas desde cualquier parte de nuestro proyecto (incluidas las vistas)... Laravel no incluye el archivo por defectp, pero nos da la opción de crearlo si lo necesitamos.

Lo primero que tenemos que hacer, es crear el archivo. Yo normalmente, lo suelo denominar helper.php y alojarlo en la carpeta App\Http.

Una vez tenemos el archivo creado, vamos a añadir algunas funciones básicas (esto es solo a modo de ejemplo):

<?php 

/**
 * Set to FALSE
 *
 * @param string $description [Just a funcy way to set a method to FALSE]
 */
if (!function_exists('setFalse')) {
    function setFalse($description)
    {
        return false;
    }
}

/**
 * Set to NULL
 *
 * @param string $description [Just a funcy way to set a method to NULL]
 */
if (!function_exists('setNull')) {
    function setNull($description)
    {
        return null;
    }
}

/**
 * Set to TRUE
 * 
 * @param string $description [Just a funcy way to set a method to TRUE]
 */
if (!function_exists('setTrue')) {
    function setTrue($description)
    {
        return true;
    }
}

Si os fijais, no hay que usar ningun tipo de namespace o llamar a ninguna clase... es simplemente, un archivo PHP, con funciones.

Igual os estais preguntando, para qué utilizo estas tres funciones. La respuesta es sencilla, en muchas ocasiones, cuando estamos instanciando una clase, solemos hacer algo así:

<?php 
    $objecto = new Clase($variable, null);
?>

El problema viene, meses después, cuando vuelves a esta clase y ves que has añadido null, pero no recuerdas a qué correspondía ese campo.

Usando la función setNull() de nuestro `helpers.php:

 <?php 
    $objecto = new Clase($variable, setNull('La variable 2 sirve para...'));
?>

Simplemente sirven para añadir algo de información a nuestro código.

Ahora que tenemos nuestro archivo creado, solo tenemos que indicarle a Laravel de su existencia. Para ello, vamos al archivo: composer.json, y buscamos el siguiente código:

"autoload": {
    "classmap": [
        "database"
    ],
    "psr-4": {
        "App\\": "app/"
    }
},

Y lo modificamos de la siguiente forma:

"autoload": {
    "files": [
        "app/Http/helpers.php"
    ],
    "classmap": [
        "database"
    ],
    "psr-4": {
        "App\\": "app/"
    }
},

Es decir, añadir el campo files y el nombre de nuestro archivo. Ahora, sólo tenemos que añadir en la consola:

composer dump

Al hacer esto, actualizamos la lista de archivos que se deben cargar por defecto, e incluimos nuestro helpers.php en esa lista. Ahora ya podemos llamar directamente a nuestras funciones desde cualquier parte de nuestro código.

Como nota adicional, tal vez, prefieras organizar tus funciones en varios archivos, por ejemplo, crear una carpeta llamada App\Http\Helpers y en ella ir añadiendo tus archivos con las funciones.

El archivo composer.json, quedaría así:

"autoload": {
    "files": [
        "app/Http/Helpers/formularios.php",
        "app/Http/Helpers/redirecciones.php",
        "app/Http/Helpers/formatos.php"
    ],
    "classmap": [
        "database"
    ],
    "psr-4": {
        "App\\": "app/"
    }
},

En este caso, hemos añadido tres archivos, en donde podemos clasificar y ordenar nuestras funciones, en base a su naturaleza.

Importante: No olvides que tu entorno local no suele ser case-sensitive, es decir, da igual que las carpetas las pongas en mayúsculas o en minúsculas, pero recuerda que en producción (en el servidor remoto), sucede lo contrarío, por lo que ojo al definir las rutas donde se encuentran tus archivos. Recuerda que app/Http/Helpers/formularios.php no es lo mismo que App/Http/Helpers/formularios.php.