Cree funciones auxiliares/clases personalizadas en Laravel - helpers

Video thumbnail

Las funciones auxiliares no son más que funciones comunes que podemos llamar en cualquier parte de nuestra aplicación. Laravel viene con una serie de funciones de ayuda integradas realmente útiles; entre las más usadas, tenemos url(), route(), asset(), env(), app(), request(), env(). Puede encontrar la lista completa de estos aquí:

https://laravel.com/docs/master/helpers

Pero como desarrolladores, a veces no solo queremos detectar la navegación móvil, si no, necesitamos escribir algunas funciones que ayuden a eliminar el código repetitivo y agreguen velocidad a nuestro desarrollo. Así que te mostraré cómo crear clases auxiliares personalizadas y usarlas en proyectos de Laravel.

En Laravel, un helper es una función de alcance global lo que significa que desde cualquier clase de componente, controlador, modelo, vista… podemos acceder a la misma para desencadenar su funcionalidad correspondiente. Los helpers no son algo inventado por Laravel, existen en multitud de otros frameworks; los helpers han ganado cada vez más cabida en las últimas versiones de Laravel, creando funciones de ayuda para otros procesos que anteriormente eran Facade (que se consideran antipatrones), por lo tanto, podemos usar los del sistema o crear nosotros los propios como mostraremos en esta entrada.

¿Qué queremos hacer?

En esta aplicación, quiero registrar todas las actividades como notificaciones en una tabla. Cuando inician sesión, cuando comentan, cuando visitan una página, cuando les gusta, publican, siguen y cualquier acción que podamos pensar.

Las funciones de ayuda o helpers son funcionalidades que podemos crear a lo largo de la app que son de propósito general; generalmente NO están vinculadas a un proceso o lógica de negocio, si no son funciones de propósito más general como la de hacer algún proceso con textos, números, imágenes... y en Laravel por supuesto podemos crear este tipo de procesos o funciones de ayuda: para eso, tenemos que cumplir 5 sencillos pasos.

Paso 1: Crear un archivo helper.php en la carpeta de la aplicación Laravel.

Los archivos helpers.php a menudo se encuentran en los siguientes lugares:

  • app/Http/helpers.php
  • app/Helpers/helpers.php
  • app/helpers.php

Para esta lección, usaremos app/Helpers/helpers.php.

<?php
namespace App\Helpers;
class Helper{
   public static function hello(string $hello){
       return "Hola $hello";
   }
}

Allí, definimos todas nuestras funciones, inclusive podemos crear más archivos con funciones de ayuda en caso de que quieras tener algún orden en tus funciones; es importante mencionar que puedes crear tantos archivos de ayuda en esta carpeta (u otras carpetas o subcarpetas) para tu aplicación, por lo tanto, no estas limitado a un único archivo.

2. Registrar en el composer.json

Una vez creada tus archivos o archivo de ayuda con tus funciones, lo siguiente que tenemos que hacer, sería registrarlo para poder emplearlo de manera global en el proyecto; para esto, tenemos que registrarlo en una regla llamada autoload, en la key de files, coloca la referencia a tus archivos helpers:

"autoload": {
       "psr-4": {
           "App\\": "app/"
       },
       "files" : ["app/Helpers/Helper.php"],
       "classmap": [
           "database/seeds",
           "database/factories"
       ]
   },

Aquí lo mismo, por cada archivo de ayuda que tengas, lo registras en el array de files.

Paso 3: Escribe tu función en app/Helpers/helpers.php

Usualmente las funciones de ayuda son funcionalidades dentro de la aplicación que no forman parte de la lógica de negocios y que queremos usar a lo largo de toda la app

<?php
namespace App\Helpers;
use App\Models\Notification;
class NotifyClass
{
  private $data = null;
  public function __construct($data)
  {
    $this->data = $data;
  }
  public function make(): bool
  {
    $notify = Notification::create([
    'user_id' => $this->data['user_id'],
    'type' => $this->data['type'],
    'created_at' => now()
  ]);
  if ($notify)
    return true;
  else
    return false;
  }
}

<?php
namespace App\Helpers;
class Helper{
   public static function hello(string $hello){
       return "Hola $hello";
   }
}

Paso 4: Refrescar dependencias

Con todo correctamente registrado, lo siguiente que tenemos que hacer es ejecutar un comando de composer para que al igual que ocurre con cualquier otro paquete de Laravel, lo indexe en nuestro archivo de arranque de composer:

$ composer dump-autoload

Ya con esto podemos emplear nuestras funciones en cualquier parte de nuestro proyecto como vemos en el video anexo en nuestro en este Post.

Paso 5: Usar

Lo siguiente que debemos hacer es, aprender a hacer uso de esta clase auxiliar.

En sus controladores, solo tiene que agregar el espacio de nombres y llamarlo.

use App\Helpers\NotifyClass;
//after following a user,
$data = [
         'user' => Auth::user()->id,
         'type' => 'follow'
   ]
(new NotifyClass($data))->make();
//after liking a post,
$data = [
         'user' => Auth::user()->id,
         'type' => 'like'
   ]
(new NotifyClass($data))->make();
//after ordering a product,
$data = [
         'user' => Auth::user()->id,
         'type' => 'order'
   ]
(new NotifyClass($data))->make();
(new NotifyClass($data))->make();

Hay muchas cosas que puedes hacer.

Ahora, podemos llamar a la clase auxiliar de notificación y registrar la acción de un usuario en la base de datos, podemos agregar un "action_id" o "notifiable_id" que podemos usar para guardar la identificación que recibe la acción del usuario. Por ejemplo, un usuario solicita un producto, action_id será el identificador del producto y el tipo será "pedido".

use App\Helpers\NotifyClass;
//after ordering a product,
$data = [
         'user' => Auth::user()->id,
         'type' => 'order'
         'action_id' => 784 //product id
   ]
(new NotifyClass($data))->make();

Se trata de lo que quieres hacer.

Hay varias formas de usar clases auxiliares en Laravel. Puede hacer funciones estáticas para un uso básico y como cualquier cosa que quiera usar varias veces de manera genérica.

Hay métodos que requieren que usted cargue automáticamente estas funciones y todo, pero aquí lo simplificamos. Pruébalo y utilízalo en tu próximo proyecto.

NO emplees la función de ayuda env() en Laravel

Hay muchas funciones de ayuda que podemos emplear en Laravel, entre la más conocida es la de env().

Video thumbnail

No se recomienda emplear la función env() directamente en tus controladores o desarrollos sin antes definir claramente su uso. Te explico por qué:

  • Naturaleza de las variables de entorno
    Las variables que env() referencia provienen del archivo .env de tu proyecto en Laravel. Este archivo centraliza múltiples configuraciones en un solo lugar, pero no garantiza que todas las variables estén definidas en producción. Si utilizas env() directamente y alguna variable no está presente, puedes generar errores inesperados.
  • Riesgo de inconsistencias
    Es posible que olvides definir alguna variable en un entorno específico, lo que provoca que tu aplicación dependa de valores que no existen fuera del entorno local. Esto puede causar fallos en producción.
  • Dificultad en mantenimiento
    Al usar env() en varios lugares de tu aplicación, se vuelve más difícil cambiar o gestionar valores de configuración, ya que el código depende directamente del archivo .env.

La alternativa correcta: config()

En lugar de usar env() directamente, define tus valores a nivel de configuración y accede a ellos mediante la función de ayuda config().

Por ejemplo:

Crea o modifica un archivo de configuración, como config/services.php:

return [
   'paypal' => [
       'client_id' => env('PAYPAL_CLIENT_ID', ''),
       'secret' => env('PAYPAL_SECRET', ''),
   ],
   'dropbox' => [
       'token' => env('DROPBOX_TOKEN', ''),
   ],
];

Accede a estos valores desde tu aplicación con config():

$paypalClientId = config('services.paypal.client_id');
$dropboxToken = config('services.dropbox.token');

Ventajas de usar config()

Evitas depender directamente del archivo .env.

Garantizas que todos los valores de configuración estén centralizados y sean consistentes en todos los entornos.

Facilitas el mantenimiento y la escalabilidad de tu aplicación.

Permites definir valores predeterminados para evitar errores si alguna variable no está definida en producción.

Mostrar un texto basado en el entorno o modo de Laravel

Laravel tiene tres tipos de ambiente: local, producción y prueba.

  • Local: Se utiliza para el desarrollo de la aplicación.
  • Producción: Se emplea para alojar la aplicación en un entorno en vivo.
  • Prueba: Se usa para ejecutar pruebas automatizadas en la aplicación.

Cada ambiente puede tener su propia configuración, ubicada en la carpeta config del proyecto. Esto permite establecer valores distintos para cada ambiente, ofreciendo flexibilidad en la configuración. Por ejemplo, se puede definir credenciales diferentes para la base de datos en desarrollo y en producción.

En general, el uso de ambientes en Laravel mejora el control y la flexibilidad sobre la configuración de la aplicación, lo que a su vez puede incrementar la calidad del software y la eficiencia del equipo de desarrollo.

Mostrar u ocultar contenido según el entorno

Una tarea común en el desarrollo es mostrar u ocultar texto o elementos HTML, o incluso iniciar o detener procesos según el entorno en el que nos encontremos. Esto se puede hacer fácilmente consultando el estado del ambiente de nuestro proyecto.

Opciones para verificar el entorno

La mejor manera de hacerlo es usando el archivo de configuración del proyecto, ya que es limpio y sencillo. También es posible preguntarle directamente a Laravel cuál es el entorno actual.

Por ejemplo:

Usando config('app.env')
@if (config('app.env') === 'production')
  Texto en Producción
@endif
Usando app()->environment()
@if (app()->environment() === 'production')
  Texto en Producción
@endif

O incluso pasando directamente el nombre del entorno:

@if (app()->environment('production'))
  Texto en Producción
@endif

Con esto, ya sabes cómo mostrar contenido según el ambiente en Laravel, aprovechando la configuración de cada entorno para tu aplicación.

El siguiente paso, consiste en aprender a usar las excepciones personalizadas en Laravel para el manejo de errores.

Acepto recibir anuncios de interes sobre este Blog.

Las funciones auxiliares no son más que funciones comunes que podemos llamar en cualquier parte de nuestra aplicación; en esta entrada te mostraré cómo crear clases auxiliares personalizadas y usarlas en proyectos de Laravel.

| 👤 Andrés Cruz

🇺🇸 In english