Blade puede volverse caótico. Lo sabemos bien. En muchos proyectos se pasan arrays asociativos a las vistas y se salta entre controladores y parciales para recordar que datos llegan a cada plantilla. Funciona, pero a menudo es engorroso y frustrante.
Yo no me conformé. Quería disciplina en Blade, el mismo autocompletado y tipado estricto que disfruto en clases PHP. Di un paso mas alla, no solo autocompletado, sino garantias duras en tiempo de ejecucion para que si pasas un tipo de dato incorrecto a una vista o a un parcial, falle de forma ruidosa con un mensaje de error claro.
En este articulo te explico como lo consegui.
Por que Blade nos falla. El enfoque tradicional en Laravel es laxa. En el controlador se hace algo como return view con compact o con un array con la clave posts y el valor de una coleccion de Post. En la vista home blade se asume que existe la variable posts y que realmente es una coleccion de Post. Blade no valida, tu IDE no lo sabe, y si alguien envia una coleccion de Comment por error, el fallo aparece tarde en la interfaz.
Para evitar esta clase de fallo silencioso, impuse tipos en tiempo de ejecucion con tres piezas sencillas. Primera, un ResponseHelper que obliga a que todos los controladores devuelvan o bien JSON para API o Ajax o bien un ViewModel tipado para Blade. Segunda, un TypedViewFactory que analiza las declaraciones @var al inicio de los archivos Blade y las hace cumplir. Tercera, un TypedViewServiceProvider que integra todo con Laravel sin friccion.
El resultado es directo. Si declaras un tipo en una vista, Laravel debe recibir la clase, array o coleccion correctos. Si no, se lanza una excepcion con diagnostico claro.
Declarar tipos en Blade es muy natural. En la vista principal puedes anotar al inicio algo como arroba var App\ViewModels\HomeViewModel espacio signo dolar model. A partir de ahi, usar model titulo es seguro. Si a esa vista llega cualquier cosa que no sea HomeViewModel, salta una excepcion explicita.
En un parcial, por ejemplo un archivo post blade, puedes anotar arroba var App\Models\Post espacio signo dolar post y luego usar post titulo. En el include, el valor para post debe ser una instancia de Post. Si llega una cadena, un entero o una clase distinta, falla y lo dice en voz alta.
Tambien cubri arrays y colecciones con genericos. Puedes documentar con PHPDoc dentro de Blade asi. Comentario PHP var barra invertida App barra invertida Models barra invertida Post espacio signo dolar post. Para arrays homogéneos var barra invertida App barra invertida Models barra invertida Post corchetes espacio signo dolar posts. Para colecciones tipadas var barra invertida Illuminate barra invertida Support barra invertida Collection< barra invertida App barra invertida Models barra invertida Post > espacio signo dolar posts. La validacion no se queda en el contenedor, inspecciona cada elemento.
Ejemplos de validacion. Si signo dolar post no es un modelo Eloquent, falla. Si signo dolar posts dice ser un array de Post pero contiene un elemento de otro tipo, falla. Si signo dolar posts deberia ser una instancia de Collection y recibe un array, falla.
Las excepciones dan precision. Caso uno, tipo incorrecto en vista principal. Mensaje ejemplo, View corchete home corchete expects signo dolar model of type App barra invertida ViewModels barra invertida HomeViewModel coma but got string. Caso dos, tipo incorrecto en un parcial. View corchete partials punto post corchete expects signo dolar post of type App barra invertida Models barra invertida Post coma but got string.
Detras del motor hay tres piezas. ResponseHelper canaliza todas las respuestas, garantiza que cada controlador entregue un ViewModel correcto o JSON segun corresponda. TypedViewFactory se engancha al sistema de vistas, lee las anotaciones arroba var y valida tipos incluyendo arrays y colecciones. TypedViewServiceProvider registra la fabrica personalizada dentro del ciclo de vida de Laravel para que todo sea transparente.
Publicare el codigo como paquete en breve para que puedas adoptarlo de forma limpia en tus proyectos.
Por que importa. Las vistas tipadas no son un capricho, son disciplina. La mayoria de apps Laravel pierden coherencia en los parciales Blade por pasar arrays sueltos con claves magicas. Con tipado, tu IDE conoce que hay disponible, tu base de codigo protesta cuando intentas atajar, y tu yo del futuro te lo agradece. Los controladores entregan el ViewModel correcto, los parciales reciben la clase que esperan, y el flujo se vuelve predecible.
En mi caso deje de depender de extensiones genericas de autocompletado para Blade y apoye el autocompletado en una herramienta profesional de PHP, mientras que el sistema de vistas tipadas se encarga de hacer cumplir los contratos en tiempo de ejecucion.
Si estas cansado de que Blade sea un juego de adivinanzas, prueba este enfoque y sube el nivel de calidad de tus vistas.
En Q2BSTUDIO aplicamos estas buenas practicas a proyectos de aplicaciones a medida y software a medida, integrando arquitectura robusta, pruebas automatizadas y despliegue continuo. Si buscas un equipo que combine desarrollo backend moderno con automatizacion y observabilidad, descubre como abordamos el desarrollo multiplataforma en nuestro servicio de aplicaciones a medida y software a medida.
Tambien impulsamos soluciones de inteligencia artificial e ia para empresas con agentes IA, reforzamos ciberseguridad y pentesting, y desplegamos servicios cloud aws y azure con foco en rendimiento y coste. Complementamos con servicios inteligencia de negocio y power bi para convertir datos en decisiones. Si necesitas una capa de orquestacion, monitorizacion y calidad para tu plataforma Laravel o microservicios, hablamos el mismo idioma.
Resumen accionable. Declara tipos con arroba var en tus Blade. Crea un ViewModel por pagina o caso de uso. Haz que tu fabrica de vistas valide los datos y lanze excepciones con mensajes explicitos. Centraliza las respuestas con un helper o pipeline de middleware que estandarice JSON y ViewModel. Empezaras a notar menos errores silenciosos y un autocompletado mucho mas util.
Proximamente compartire el paquete para que puedas instalarlo y configurarlo en minutos. Si te interesa que lo adaptemos a tu contexto con auditoria de vistas, generacion de ViewModels y guias de migracion, cuenta con Q2BSTUDIO.