Más de 30 Tips para Laravel, también consejos

arrow_back Blog

En esta entrada quiero compartir contigo los que para mi son algunos de los mejores Tips para Laravel, todo basado en mis años de experiencia desarrollando proyectos Laravel desde la versión 4.

Antes de seguir, y sólo a modo de nota, te dejo algunos enlaces de interés a cursos y tutoriales que estoy seguro te ayudarán mucho a complementar esta entrada.

Curso Laravel 8

Arquitectura en Laravel

Herramientas de desarrollo para Laravel

Desarrollo web en 2021

Tips para Laravel Union en Eloquent

Eloquent nos permite unir dos consultas de la siguiente forma.

Directiva @class  en Laravel v8.51.0

La release de Laravel v8.51.0 añadió una nueva directiva @class a Blade, su uso es el siguiente.

Validar fechas con formato

Algo que en PHP nativo puede ser complejo, en Laravel y gracias a su sistema de validación es muy simple.

Validar arrays de strings

Siguiendo con la validación, en algunas ocasiones deberemos validar datos similares a los tags de un formulario. Con lo siguiente podemos asegurarnos que cada uno de esos tags cumpla una serie de restricciones.

Previsualizar emails en el navegador

Este Tip ya lo hemos visto en el curso de Laravel 8, el cual nos permite previsualizar los emails en el navegador en lugar de tener que realizar el envío. De esta forma podemos optimizar nuestros correos más rápidamente.

Aplica Traits a tus relaciones ManyToMany

Si alguna vez necesitas realizar algún ajuste que no ves posible en tus relaciones ManyToMany, recordemos que normalmente no definimos modelos para estos caso, simplemente haz lo siguiente.

Controladores Invokables

Los controladores Invokables nos permiten ejecutar una sola acción, algo muy útil en muchos casos.

Antes de ver su contenido, es importante saber que podemos generarlos con los stubs de Laravel utilizando el flag --invokable o -i.

Cualquiera de los comandos anteriores habrá generado el siguiente controlador.

Ya que este tipo de controladores sólo ejecutan un único método, en este caso el método mágico __invoke (lo vemos en el curso de PHP 7), debemos saber cómo utilizarlo en las rutas de Laravel.

Al controlador SettingsController se le puede "invokar" sin la necesidad de definir un método desde el archivo de rutas de Laravel porque es un controlador invokable.

Controladores Resource

Los controladores Resource en Laravel nos permiten realizar todas las operaciones posibles normalmente sobre nuestros modelos Eloquent. Es importante dejar claro que no están pensados para el trabajo con API, la idea es hacer uso de ellos para operaciones de CRUD a nivel de interfaz.

Para crear un controlador Resource en Laravel vinculado a un modelo existente podemos ejecutar el siguiente comando.

El comando anterior habrá generado el siguiente archivo, fíjate que el modelo Project ya está siendo utilizado en los métodos que lo necesitan.

Generar todas las rutas de un controlador Resource es muy sencillo, sólo debemos utilizar el método resource de la fachada Route.

Generar rutas resource Laravel

Except y Only en las rutas resource

En muchas ocasiones no desearemos que el método resource de las rutas genere todos los endpoints. Para solucionar este problema tenemos 2 métodos, only y except.

El método only sólo definirá los métodos que le pasemos, el método except los definirá todos excepto los que le pasemos, mira este ejemplo.

Missing en las rutas resource

El método missing en las rutas resource nos permite interceptar la excepción para cuando un modelo de una ruta resource no se encuentre, algo muy típico. De este forma, podemos personalizar este comportamiento fácilmente.

Registrar múltiples rutas resource

Si vamos a tener múltiples rutas resource también las podemos registrar todas de una vez con el siguiente código.

Controladores API

Los controladores API en Laravel están pensados para ser consumidos desde el exterior. Por este motivo, estos controladores excluyen los métodos create y edit, ya que únicamente son propósito de interfaces.

Generar un controlador API en Laravel con Artisan haciendo uso de un modelo concreto es tan sencillo como sigue.

El siguiente comando habrá generado el siguiente controlador.

Generar todas las rutas de un controlador API es muy sencillo, sólo debemos utilizar el método apiResource de la fachada Route.

Registrar múltiples rutas apiResource

Si vamos a tener múltiples rutas API también las podemos registrar todas de una vez con el siguiente código.

Autocompletado avanzado en los modelos Laravel

Yo utilizo desde hace mucho tiempo el plugin de PhpStorm Laravel Idea, el cual me permite ser más productivo en mi día a día gracias a toda la ayuda que me ofrece. En este caso veamos algunas cosas relacionadas con Eloquent partiendo de la siguiente migración para la tabla projects, algo bien sencillo.

Autocompletar atributos en los modelos Eloquent

Autocompletar atributos en los modelos Eloquent

Autocompletar where de los modelos Eloquent

Autocompletar where de los modelos Eloquent

Autocompletar relaciones de los modelos Eloquent

Autocompletar relaciones de los modelos Eloquent

Esto sólo es la punta del iceberg, si quieres conocer Laravel Idea a fondo, puedes utilizarlo gratuitamente durante un tiempo limitado.

Modelos Eloquent sin Timestamps

Las columnas de timestamp en Laravel nos permiten gestionar la fecha de alta y de actualización de nuestros modelos. Pero este dato en muchos casos no es necesario. Para evitar su uso en tus modelos Eloquent sólo debes definir la siguiente propiedad en el modelo.

A partir de ahora, cada vez que crees/edites un modelo, las fechas de alta y edición no serán utilizadas por Laravel.

Modificar el nombre de la tabla con Eloquent

Por defecto Eloquent busca una tabla a través del nombre del modelo aplicando snak_case en plural, es decir, para el modelo Project irá a buscar la tabla projects a nuestra base de datos.

En nuestra carrera como desarrolladores tendremos ocasiones en las que nos encontraremos con proyectos existentes que debemos migrar y no podemos permitirnos modificar los nombres de las tablas. Para solucionar este "problema" los más sencillo es decirle a nuestros modelos Eloquent el nombre de la tabla.

Con este ajuste, nuestro modelo Project utilizará a partir de ahora la tabla proyectos en lugar de projects.

Utiliza Scopes en Eloquent

En lugar de hacer esto en tus controladores o repositorios.

Haz lo siguiente:

Observers en Eloquent

En nuestros modelos Eloquent suceden demasiadas cosas, sean directas o a través de sus relaciones.

Eventos de los modelos Eloquent

retrieved, creating, created, updating, updated, saving, saved, deleting, deleted, restoring, restored replicating

Para simplificar el trabajo y dividir el código consiguiendo una mejor organización y centralización mi recomendación es hacer uso de Observers.

Crear un Observer para un modelo concreto es tan sencillo como sigue.

Un observer por sí sólo no sirve de nada, debemos decirle a Laravel que lo utilice. Para ello, lo más sencillo es utilizar el EventServiceProvider que Laravel nos ofrece de base.

A partir de ahora, cualquier evento que suceda en nuestro modelo Project podrá ser capturado desde nuestro Observer.

Responde Eloquent Resources en tus API

Las API deben retornar los datos en un formato concreto. Para solucionar esto rápidamente mi recomendación es utilizar Eloquent Resources, aquí tienes un curso completo. Gracias a esta poderosa herramienta de Laravel podremos centralizar el formato de las respuestas API de nuestros modelos facilmente, incluso con relaciones entre ellos.

Utiliza borrados lógicos en lugar de físicos

Una base de datos no es más que archivos de texto plano que guardan toda nuestra información. Si no queremos que nuestros archivos contengan espacios y por consiguiente mayores problemas para obtener la información (rendimiento) te recomiendo utilizar borrados lógicos en tus proyectos.

Utilizar borrados lógicos en Laravel es bien sencillo, sólo debemos crear nuestras tablas con la columna deleted_at y aplicar el Trait SoftDeletes a cada modelo.

¿Test para todo? No es necesario

Muchas veces pecamos de querer ser los mejores y a veces nos pasamos de PRO.

Las partes más importantes de testear en cualquier proyecto son siempre las más sensibles y, si desde ahí tenemos problemas, entonces ir bajando en su jerarquía, es algo sencillo de entender.

Si estás desarrolando un sistema de inventario, es importante que hagas Test para controlar el stock, es obvio, pero no de si los archivos suben al sistema de Storage, por poner un ejemplo.

Como también es obvio que siempre que trabajemos con transacciones monetarias debemos controlar absolutamente todo y, en este caso, sí es necesario hacer Test de toda su funcionalidad.

TDD ¿Sí o no? A veces...

Lo mismo pasa con TDD (test-driven development). Si no lo sabías, es una técnica de programación en la que antes de realizar la funcionalidad se realizan los Test.

Personalmente creo que TDD es muy útil en muchos casos, particularmente me sirve mucho cuando necesito desarrollar formularios complejos que requieren de mucha funcionalidad. Gracias  a utilizar TDD puedo encontrar futuros problemas que anteriormente no había detectado.

Curso de introducción a las pruebas unitarias con Laravel

Curso Test a API Rest con Laravel Sanctum

Queues y Jobs

Laravel nos ofrece una interfaz completa para el trabajo con Queues (colas) y Jobs (trabajos|tareas). Gracias a estas características completamente necesarias en la web moderna, podemos desarrollar procesos que no sean síncronos, es decir, desarrollar procesos avanzados entre bambalinas, envío de correos, procesar vídeos, subida de archivos pesados y todo lo que se te ocurra.

En este caso, Laravel nos ofrece Horizon, sin duda la mejor herramienta para gestionar Queues utilizando Redis. En mi caso lo vengo utilizando en Laravel Forge con grandes resultados.

Horizon nos ofrece un Dashboard con todo lo que podemos necesitar en nuestro día a día para gestionar las Queues gestionadas por Redis.

Queues y Jobs Laravel Horizon

Subdominios en las rutas de Laravel

En muchos proyectos podemos desear gestionar desde nuestro sistema de rutas diferentes subdominios, sea por tener un blog vinculado a nuestro dominio principal o por estar trabajando en una aplicación multi inquilino con subdominios para cada usuario.

Crear rutas que atiendan a un subdominio blog en Laravel es tan fácil como sigue.

Subdominios con wildcards

El uso de wildcards (comodínes) es muy útil si deseamos atender a subdominios de forma dinámica utilizando nuestro sistema de rutas. El siguiente ejemplo atenderá a cualquier subdominio.

Sentry: gestión de errores/rendimiento/excepciones

Es cierto que nuestros proyectos siempre van a tener bugs, todos lo tienen, por muchos tests que realices, no estás a salvo. Ahora bien, podemos solucionar muchos bugs y problemas de rendimiento utilizando herramientas que funcionan.

Sentry nos ofrece una solución completa para gestionar errores y problemas de rendimientos desde una interfaz completa.

Sentry: gestión de errores/rendimiento/excepciones

Patrón repositorio

En este curso ya cubrimos de forma completa el patrón repositorio con Eloquent. El patrón repositorio en Laravel nos permite aislar el código que interactua con nuestros modelos para que nuestros controladores contengan menos código sin perder funcionalidad.

Utilizar el patrón repositorio te ayudará a ser más organizado y te dará la posibilidad de escribir mejor código y más sencillo de mantener (divide y vencerás).

No optimices antes de tiempo

Esto más que un Tip es un consejo. Muchas veces queremos hacer las cosas de la mejor forma de buenas a primeras, sin contar que nuestro cliente nos puede cambiar lo que nos ha pedido de la noche a la mañana sin más. Por ese motivo, nunca optimices tu código prematuramente, espera el momento oportuno para hacerlo.

Servidores de producción para Laravel

En esta entrada únicamente te voy a recomendar Laravel Forge, los motivos son los siguientes:

  • Desarrollado y mantenido por el equipo de Laravel.

  • Soporte inmediato para cualquier duda.

  • Todo lo que Laravel nos ofrece está a unos clicks.

  • Alta de nuevos servidores con un click.

  • Horizon configurado en 2 minutos.

  • Scheduler.

  • Backups (Plan Business).

  • Monitoring (Plan Business).

  • Bases de datos a demanda.

  • SSH Keys.

  • Let's Encrypt.

  • Integración con GitHub.

  • Sistema de notificaciones.

Si deseas aprender a trabajar con Laravel Forge y crear tu primer sitio no te pierdas este curso.

Traducciones para tus interfaces

Por defecto Laravel viene en inglés, pero eso es algo que podemos cambiar fácilmente desde el archivo config/app.php.

Si deseas tener todas las traducciones en decenas de idiomas para tus proyectos Laravel simplemente instala este package y sigue sus instrucciones.

Desarrolla tus propios paquetes

En este curso ya cubrimos de forma completa el desarrollo de paquetes con Laravel el cual es 100% funcional a día de hoy.

Gracias a esta poderosa forma de trabajar podemos aislar cierta lógica en pequeños trozos código que vayamos a utilizar en múltiples proyectos en lugar de tener que estar copiando y pegando código.

Formularios reutilizables

Los que han seguido mis cursos saben que NUNCA creo 2 formularios para un modelo. En su lugar, desarrollo un único formulario capaz de crear y actualizar datos.

Mi recomendación en este caso sin dudarlo es Laravel Collective.

Es un ejemplo muy básico, pero contiene todo lo necesario para hacerme entender.

El objeto $loop en Blade

Laravel nos ofrece a través de su poderoso motor de plantillas Blade la posibilidad de realizar iteraciones de diferentes formas con una sintaxis agradable a través de varias directivas. Pues bien, además de esto, concretamente con las directivas @foreach y @forelse podemos controlar lo que está sucediendo en cada iteración gracias al objeto $loop.

El objeto $loop en Blade

Mejora la sintaxis de las foreign keys en tus migraciones

En lugar de hacer esto:

Haz esto:

Detén la ejecución de un evento a través de sus listeners

En esta entrada expliqué cómo trabajar de forma completa con Eventos y Listeners en Laravel. Un tip muy útil es saber cómo parar la cascada de listeners que puedan ejecutarse en un evento.

Para detener los listeners que se ejecutan dentro de un evento, lo único que debemos hacer es retornar false desde el método handle de cualquiera de ellos.

Dump, Die, Debug (ddd)

En la mayoría de las ocasiones utilizamos el helper dd de Laravel para parar la ejecución del programa y ver qué está pasando. Mi recomendación para tener más información es utilizar ddd.

Dump, Die, Debug (ddd)

Laravel Telescope, pero sólo en local o con cuidado

Telescope es un compañero maravilloso para nuestro entorno de desarrollo local en Laravel. Telescope nos proporciona información sobre las solicitudes entrantes, excepciones, entradas de registro, consultas de bases de datos, trabajos en cola, correo, notificaciones, operaciones de caché, tareas programadas, volcados de variables y más.

Todo lo anterior es maravilloso, pero seamos sinceros, Telescope es un comilon. El motivo es que la forma en la que gestiona la información que va consiguiendo la almacena en base de datos haciendo uso de 3 tablas. Muchas de estas tablas se llenan rápidamente y, aunque las podemos limpiar cada día fácilmente, para llenarlas ya habrá consumido muchos recursos.

Mi consejo es que utilices Telescope pero no para entornos de producción, sólo para tu entorno local.

Utiliza FormRequest en lugar de $this->validate

Cuando desarrollamos formularios debemos validarlos sí o sí. Laravel nos ofrece diferentes caminos, pero sin duda el más limpio y elegante es a través de los FormRequest.

El FormRequest anterior podrá ser inyectado en los métodos store y update sin que debamos hacer nada más, gracias al switch del método HTTP ejecutará una condición u otra.

Utiliza colecciones para escribir mejor código, no para todo

Las colecciones de Laravel son poderosas, pero no por ello debemos utilizarlas siempre. Mi recomendación es que las utilices cuando realmente puedan ayudarte a escribir menos y mejor código.

Crea directivas Blade en lugar de utilizar condicionales (no siempre)

En lugar de tener @if repetidos y esparcidos en tus plantillas Blade, te recomiendo crear tus propias directivas, de esta forma podrás modificar tu código en un único lugar y afectará a todo (centraliza tu código siempre que puedas).

Extract methods (PhpStorm lo hace con un click)

Muchas veces nos ponemos a escribir código y las cosas no salen, o no salen, o cuesta que salgan, gajes del oficio... El problema de esto es que muchas veces nuestros métodos cuentan con tantas líneas de código que de un vistazo no puedes leerlo, a no ser que tengas una pantalla de 100".

Mi recomendación es que dividas las partes de tu código en pequeños métodos que realicen acciones concretas. PhpStorm hace esto con un click de forma automática.

Utiliza AWS S3 para almacenar archivos en lugar de tu servidor

Utilizar el sistema de archivos de tu servidor puede ser en muchos casos inviable, sea por limitación, costes o rendimiento. Mi recomendación aquí es que utilices el sistema de almacenamiento de S3 que Laravel nos ofrece.

Cursosdesarrolloweb Cursosdesarrolloweb

Cursosdesarrolloweb es una plataforma educativa con cursos y tutoriales en texto y vídeo.

Términos y condiciones Política de privacidad Formulario de contacto

Copyright 2024 © Todos los derechos reservados.

Contacto