Cómo definir nuestros propios helpers en Laravel (2 pasos)
Tiempo de lectura: 1.93 minutos
Introducción
Los helpers nos ayudan a realizar ciertas operaciones, en función a las tareas que encontramos comúnmente.
Se pueden representar a través de clases, o como funciones utilitarias, y están disponibles para su uso en todo nuestro proyecto.
En este artículo vamos a ver cómo definir helpers a través de funciones.
Con sólo llamar a estas funciones tendremos acceso a los datos o a la funcionalidad que necesitamos, de una forma bien puntual e inmediata.
Laravel: Define helpers en 2 pasos
Existen muchas formas de definir los helpers.
En este caso vamos a usar el método más instantáneo para salir de apuros cuando necesitamos tener disponible una función sin tantos rodeos.
- Paso 1: Crear un archivo
helpers.php
dentro de la carpetaapp/Http
, y cargar este archivo a través delcomposer.json
. - Paso 2: Luego de modificar el archivo
composer.json
, ejecutar el comandocomposer dump-autoload
.
Si tienes dudas sobre cómo cargar el archivo helpers.php
(me refiero al paso 1), puedes guiarte de este ejemplo:
"autoload": {
"classmap": [
...
],
"psr-4": {
"App\\": "app/"
},
"files": [
"app/Http/helpers.php" // <---- CARGAMOS EL ARCHIVO INDICADO
]
},
Ejemplo 1
En mi caso, tengo un footer que está disponible en la gran mayoría de páginas de mi aplicación.
En este footer quiero mostrar un listado de todos los Skill
s existentes en la base de datos.
A fin de no escribir la consulta en todos los controladores, una alternativa es crear un helper, para tener al alcance esta información siempre que se requiera.
- Considerando ello, el archivo
helpers.php
definiría una función llamadaskills()
. - Y luego de ello, ya es posible usar la función en cualquiera de las vistas.
<ul>
@foreach (skills() as $skill)
<li>
<a id="footer-link-license" href="{{ route('skill', ['slug' => $skill->slug]) }}">
{{ $skill->name }}
</a>
</li>
@endforeach
</ul>
Ejemplo 2
Ahora estoy desarrollando una aplicación que permite enviar mensajes de texto (SMS) a través de una API.
La lógica para el envío de mensajes de texto es la misma en todos los casos (se necesita el teléfono y el mensaje a enviar).
Sin embargo, necesito usar esta lógica en muchos lugares de mi aplicación. En algunos controladores, en algunos eventos, y en algunas tareas programadas.
Como la llamada a la API no es muy compleja, he decidido crear una función sendSMS(phone, message)
en el archivo de helpers.
Ahora tengo disponible esta funcionalidad, ¡y la puedo usar desde todos lados!
function sendSms($phone, $message) {
$phone = str_replace(' ', '', $phone); // clear spaces in phone number
$fields = [
"apikey" => env('SMS_API_KEY'),
"mensaje" => $message,
"numcelular" => $phone,
"numregion" => "52"
];
$options = [
CURLOPT_URL => "http://smsmasivos.com.mx/sms/api.envio.new.php",
CURLOPT_POST => TRUE,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_POSTFIELDS => $fields
];
curl_setopt_array($ch = curl_init(), $options);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response);
}
Conclusión
Si necesitamos usar una funcionalidad bien puntual a lo largo de nuestro proyecto, podemos definir nuestros propios helpers.
Esto útil porque no requiere de mucho esfuerzo y nos saca de apuros mientras desarrollamos aplicaciones pequeñas.
Sin embargo, si la funcionalidad que queremos tener disponible es mucho más compleja, lo recomendable es definir clases que representen servicios.
Éstas clases podrían incluir validaciones, y tratar distintos escenarios.