Cómo crear tus propios helpers en Laravel en 4 pasos
Laravel viene por defecto con un buen número de helpers que nos facilitan mucho la vida a la hora de programar con este framework de PHP.
Los tenemos para trabajar con arrays, urls, strings... pero en muchas ocasiones nos encontramos con la necesidad de crear uno propio para hacer algo que no viene incluido de serie.
Vamos a ver cómo crearlos y verás lo sencillo que es. Para ello vamos a usar un ejemplo concreto.
Supongamos que tenemos en la base de datos varias tablas donde guardamos el orden en que queremos mostrar los registros en la web, por ejemplo una tabla de categorías y otra de portfolio.
En ambas tendremos un campo ordering para ese valor. Cuando demos de alta un nuevo registro necesitaremos saber cuál es el orden máximo actual para asignarle ese valor más uno.
Vamos al lío.
PASO 1: Crear la carpeta y el archivo
Dentro de la carpeta app vamos a crear una nueva carpeta llamada Helpers. Ahí dentro creamos un archivo PHP que se llame, por ejemplo, Helpers.php. Sencillo.
PASO 2: Registrar el archivo en composer.json
Ahora tenemos que decirle a Composer que cargue automáticamente nuestro archivo. Para ello abrimos composer.json y en la sección autoload añadimos una clave files con la ruta a nuestro helper:
"autoload": {
"psr-4": {
"App\\": "app/"
},
"files": [
"app/Helpers/Helpers.php"
]
},
Laravel 12: Si usas Laravel 12 o superior con la nueva estructura de carpetas, la ruta puede variar, pero el principio es exactamente el mismo.
PASO 3: Regenerar el autoload
Una vez guardado composer.json, vamos al terminal y ejecutamos:
composer dump-autoload
Esto le dice a Composer que regenere el mapa de clases y archivos. A partir de aquí, Laravel cargará nuestro archivo automáticamente en cada petición.
PASO 4: Crear los helpers
Ahora ya podemos escribir nuestras funciones. En mi caso me he creado un helper llamado maxOrdering que devuelve el número de orden que le tengo que asignar a un registro nuevo en la tabla que le indiquemos. El código queda así:
<?php
function maxOrdering($table, $field = null, $value = null)
{
$order = DB::table($table)
->when($field, function ($query) use ($field, $value) {
return $query->where($field, $value);
})
->max('ordering');
return is_null($order) ? 1 : $order + 1;
}
Lo que hace esta función es sencillo: consulta el valor máximo del campo ordering en la tabla que le pasemos, con la posibilidad de filtrar por un campo adicional.
Si no hay registros todavía, devuelve 1. Si ya hay registros, devuelve el máximo más uno. Así de simple.
Ojo con esto: si en algún momento actualizas Laravel o mueves el proyecto a otro servidor y los helpers no se cargan, lo primero que tienes que revisar es que composer dump-autoload se haya ejecutado correctamente en ese entorno. El 90% de las veces es eso.
OTROS EJEMPLOS DE HELPERS QUE PUEDES CREAR
Para que te hagas una idea de hasta dónde puedes llevar esto, te dejo algunos helpers que yo uso habitualmente en mis proyectos.
Formatear fechas en español
Uno de los que más uso. Laravel trabaja con fechas en inglés por defecto y muchas veces quieres mostrarlas en español con un formato más natural, por ejemplo "15 de marzo de 2025" en lugar de "2025-03-15". Con este helper lo resuelves en una línea:
function fechaEspannol($fecha)
{
$meses = ['enero','febrero','marzo','abril','mayo','junio',
'julio','agosto','septiembre','octubre','noviembre','diciembre'];
$dt = \Carbon\Carbon::parse($fecha);
return $dt->day . ' de ' . $meses[$dt->month - 1] . ' de ' . $dt->year;
}
Y en tu vista lo usas simplemente así: {{ fechaEspannol($articulo->created_at) }}. Nada más.
Generar un slug único
Cuando el usuario crea un artículo o una categoría, normalmente quieres generar un slug automáticamente a partir del título. El problema es que si ya existe ese slug en la base de datos tienes un conflicto. Este helper lo resuelve añadiendo un sufijo numérico cuando hace falta:
function uniqueSlug($titulo, $tabla, $id = null)
{
$slug = Str::slug($titulo);
$count = DB::table($tabla)
->where('slug', $slug)
->when($id, fn($q) => $q->where('id', '!=', $id))
->count();
return $count > 0 ? $slug . '-' . $count : $slug;
}
El parámetro $id es opcional y sirve para los casos en los que estás editando un registro que ya existe: así excluyes el propio registro de la búsqueda y no genera un slug nuevo innecesariamente.
Truncar texto sin cortar palabras
Sí, Laravel tiene el helper Str::limit(), pero en muchos proyectos necesitas algo más: truncar respetando las palabras completas y añadiendo puntos suspensivos solo cuando el texto es más largo que el límite. Este lo hago así:
function truncarTexto($texto, $limite = 150)
{
if (mb_strlen($texto) <= $limite) return $texto;
return mb_substr($texto, 0, mb_strrpos(mb_substr($texto, 0, $limite), ' ')) . '...';
}
Uso mb_strlen y mb_substr en lugar de strlen y substr para que funcione correctamente con caracteres en español como tildes o la ñ. Si alguna vez te ha aparecido un texto cortado en mitad de una palabra sabes perfectamente por qué merece la pena tener esto como helper.
Como puedes ver, crear tus propios helpers en Laravel es cuestión de minutos. Con estos cuatro pasos ya tienes todo lo que necesitas para añadir las funciones globales que quieras a tu aplicación.
Comentarios (0)
Deja un comentario
Tu dirección de correo no será publicada. Los campos obligatorios están marcados con *