View Composers proporciona una solución muy elegante a un problema muy específico. Si ha pasado algún tiempo construyendo en Laravel, es probable que en algún momento se haya encontrado con la excepción de error de variable indefinida que se arroja desde un archivo de vista. De modo que inspecciona sus métodos en sus controladores, averigua dónde olvidó buscar información específica, luego realiza la corrección y el error desaparece. Muchas veces esto sucede con archivos de vista parcial en los que carga un parcial en una sección del sitio, pero quizás lo deja desactivado en otra. View Composers soluciona este problema por usted, y en este tutorial, examinaremos qué causa el problema y cómo solucionarlo con View Composers.


Manejo de datos de vista parcial

Recientemente cubrimos el trabajo con declaraciones SQL sin procesar dentro de nuestras consultas Eloquent. Este enfoque nos sirvió bien para crear un tipo de widget que muestra información sobre los usuarios más activos en nuestros sitios. Primero configuramos esto en nuestra vista de índice para juegos, luego lo configuramos para nuestra vista de índice de reseñas. Incluir el archivo de vista parcial fue muy fácil para incluir ese widget. ¿Qué pasa si queremos agregar ese parcial a otra sección de nuestro sitio? Por ejemplo, tal vez queramos incluir este parcial en nuestra vista de presentación para un juego específico. ¡Excelente! ¡Eso es fácil, dices! Hacemos los ajustes necesarios en nuestro archivo de vista y luego lo revisamos en nuestro navegador.


recursos / vistas / juegos / show.blade.php

Visitamos en nuestro navegador, ¿y qué? Variable indefinida: activeusers (Ver: /home/vagrant/Code/54/resources/views/partials/activeusers.blade.php
excepción de error variable indefinida

¡¡¡Dang Nabbit !!! Así que recordamos, oh sí, es cierto, necesitamos usar esa consulta personalizada que habíamos creado y hacer una llamada a la base de datos para que podamos completar la variable $ activeusers y enviarla a nuestro archivo de vista para que dejemos de recibir estos errores. . ¡Okay! Sigamos adelante y actualicemos el método show () de nuestro controlador de juegos.


aplicación / Http / Controllers / GamesController.php

¡Ahora nos vemos bien!
archivo de vista parcial ahora tiene variable

¡Fantástico! Verá cómo incluir este archivo de vista parcial en cualquier lugar de la aplicación si lo desea. Tutorial terminado ... ¡Es broma! Aquí radica el problema. Acabamos de solucionar el problema, pero ¿qué teníamos que hacer? Piense en la primera vez que creamos el widget de usuarios más activos. Al principio, solo íbamos a mostrar este widget en la vista de índice del recurso Juegos. Muy fácil, incluimos el parcial en ese archivo de vista y actualizamos el método index () del controlador de juegos. Luego, lo pensamos y dijimos: "Sería bueno agregar este widget a la vista del índice Reseñas también". Así que seguimos adelante e incluimos el parcial en ese archivo de vista, luego actualizamos (leemos: duplicamos) la lógica de nuestro método Games index () a nuestro método Reviews index (). Finalmente en este tutorial, pensamos, hmm, ¿Por qué no seguimos adelante y agregamos ese pequeño widget genial al archivo de vista de show para Juegos? Entonces agregamos nuestro archivo de vista parcial para incluir este widget, luego lo probamos en el navegador y se grana. Aquí está el problema: cada vez que queremos hacer uso de ese archivo de vista parcial en nuestra aplicación, tenemos que rastrear el controlador y el método responsable, y seguir duplicando la misma consulta una y otra vez, solo para asegurarnos de que una variable en particular es poblado. Hay una mejor manera. solo para asegurarse de que se complete una variable en particular. Hay una mejor manera. solo para asegurarse de que se complete una variable en particular. Hay una mejor manera.


Ver compositores al rescate

Si ha sido víctima de ese modo de pensar que acabamos de describir, (como yo), estará feliz de aprender sobre View Composers. Los compositores de vistas nos brindan una manera de configurar una especie de oyente simple, que se puede configurar para completar una variable automáticamente para nosotros, por lo que no tenemos que ensuciar todos nuestros métodos de controlador con código duplicado. Así es como podemos hacer eso mismo en nuestro ejemplo.


app / Providers / AppServiceProvider.php

Lo que hace este código aquí es configurar una especie de oyente que escuche en cualquier momento en que el archivo de vista de partials.activeusers se cargue en nuestra aplicación. Podemos ver que el segundo parámetro del método composer () es una función de devolución de llamada. Esta función se activa cada vez que se carga el archivo de vista de partials.activeusers. Entonces, dentro de esta función de devolución de llamada, podemos continuar y completar esa variable $ activeusers. Con esta lógica en su lugar, nuestra aplicación podría cargar el archivo de vista de partials.activeusers en un método de controlador, o todos ellos si lo desea. No importa qué, ese parcial tendrá acceso a los datos que necesita cada vez. En nuestro caso, esa es la variable $ activeusers poblada. Así que continúe y actualice cualquier método de controlador que todavía esté haciendo llamadas a $ activeusers = User :: activeusers (); y quitarlo. También puede eliminar el paso de la variable $ activeusers a los archivos de vista. Nuestro compositor de vistas se encarga de todo esto automáticamente ahora.
ver compositores en acción

Todo está funcionando perfecto. Nuestro pequeño widget se muestra sin problemas en cualquier parte de nuestro sitio web que lo requiera. Podríamos agregarlo en todas partes si quisiéramos, y ese compositor de vista aún nos respaldaría.


¿Qué es un View Composer en Laravel Resumen?

View composers es uno de esos pequeños trucos mágicos en Laravel que ayudan a hacer las cosas un poco más fáciles. ¿Podrías arreglártelas sin ellos? Claro, pero una vez que aprenda a usarlos, encontrará que tienen mucho sentido en muchos escenarios.