Post Top Ad

Your Ad Spot

martes, 8 de septiembre de 2020

Cómo utilizar View Composers

 Cómo utilizar View Composers

En este tutorial aprenderemos cómo usar los compositores de vistas en nuestra pequeña aplicación de foro. Los compositores de vistas son una forma de asegurarse de que ciertos datos estén disponibles para ver archivos, sin importar qué punto final esté visitando en una aplicación. Discutiremos la colocación de consultas SQL en archivos de vista, frente a tenerlas en un controlador, frente a hacer uso de compositores de vista. Como una pequeña ventaja, también cubriremos cómo importar automáticamente una clase en PHP Storm. Comencemos a cocinar con los compositores de vista.


SQL en archivos de plantilla

Es posible que haya notado que en algunos tutoriales anteriores, colocamos algunas consultas SQL directamente en nuestra vista o archivos de plantilla. Esto está bien, pero si desea eliminar esas consultas de las plantillas y aún así todo funciona, los compositores de vistas están aquí para ayudarlo con eso. Recuerde que en nuestro archivo create.blade.php tenemos este código que alimenta el menú desplegable para nuestra selección de canal.


¿Mover la consulta al controlador?

A primera vista, podría pensar en mover la consulta al controlador, y por qué no, ¿verdad? En muchos casos, este es realmente el camino a seguir. Sin embargo, aquí está el problema. Dado que los datos solo se comparten con la vista particular que ese método representa en el controlador, otras vistas que puedan necesitar acceso a esos mismos datos fallarán. Luego, debe visitar cada método diferente en cualquier controlador que esté creando estas vistas diferentes y agregar la consulta necesaria para proporcionar los datos. No es un gran problema si tiene 2 o 3 lugares donde necesita agregar la consulta. ¿Y si tienes muchos más? En este punto, tiene sentido apoyarse en un compositor de vistas, donde puede compartir los datos con cualquier vista necesaria.


Cómo funciona AppServiceProvider

Para habilitar esta característica ligeramente mágica, visitamos el archivo AppServiceProvider.php. El archivo AppServiceProvider.php tiene un método boot (), y aquí es donde podemos comenzar a configurar un compositor de vistas. Esto puede tomar algunas formas. Veamos.

En este fragmento anterior, estamos registrando un compositor de vista para la vista 'threads.create'. En el cierre, lo que estamos diciendo es que cuando se carga esa vista, la variable 'canales' debería estar siempre disponible. El contenido de esa variable se proporciona mediante la consulta proporcionada como segundo argumento del método with (). En este caso, es \ App \ Channel :: all ().


Eliminar consulta de la vista

Ahora que existe un compositor de vistas para la plantilla create.blade.php, podemos eliminar la consulta de la vista y solo hacer referencia a la variable $ channels real. Mira aquí.


¿Sigue funcionando la vista?

Visite la página http://forum.io/threads/create y sea testigo del poder de un compositor de vistas. ¡La página funciona perfectamente y el menú desplegable todavía se completa correctamente con todos los canales necesarios!
ver al compositor trabajando muy bien


Consulta en la vista layouts / app.blade.php

Recuerde que teníamos un segundo lugar en el que hacíamos uso de una consulta SQL en un archivo de vista. Esto estaba en el archivo de diseño de app.blade.php. Con los compositores de vistas, también deberíamos poder limpiar esa instancia. En este fragmento a continuación, eliminamos nuevamente App \ Channel :: all () y lo reemplazamos con $ channels.


El primer argumento para el método View :: composer ()

Ahora es un buen momento para hablar sobre sus opciones para pasar el primer argumento al método View :: composer (). Hasta ahora, hemos especificado una cadena de 'threads.create' para el método. Lo que esto dice es que la variable generada * siempre * estará disponible en esa vista. Ahora, agregamos también eliminó una consulta del archivo app.blade.php. Esta es una vista diferente. ¿Seguirá funcionando todo? Bueno, resulta que si visitas http://forum.io/threads/create, todo seguirá funcionando. Sin embargo, ¿qué pasa si visitas otro lugar? Si intentamos visitar http://forum.io/threads, por ejemplo, obtenemos un error desagradable:

ErrorException lanzada con el mensaje "Variable no definida: canales (Ver: /home/vagrant/Code/forumio/resources/views/layouts/app.blade.php) (Ver: / home / vagrant / Code / forumio / resources / views / layouts /app.blade.php) "

Esto sucedió porque nuestro compositor de vistas solo comparte la variable con create.blade.php. Cuando visitamos http://forum.io/threads, el archivo index.blade.php está intentando cargarse. Nuestro compositor de vistas no comparte con esta vista, ni comparte con la vista app.blade.php, así que, ¡vaya !, obtenemos este error.


La * corrección de comodines

Su primer enfoque para solucionar esto es simplemente pasar un asterisco como primer argumento a View :: composer () como se muestra en el siguiente fragmento. Esto comparte la variable con cada vista en su aplicación.

Ahora podemos visitar http://forum.io/threads y está funcionando nuevamente.
asterisco en vista compositor


Simplifique aún más con View :: share ()

La última forma de abordar este problema de eliminar sql de sus archivos de plantilla es con View :: share (). Echa un vistazo a este delineador que se destaca a continuación:

Una vez más, si continúa y visita todas las diferentes páginas de su sitio, todo funciona perfectamente. El código anterior se asegura de que la variable $ canales esté disponible en cualquier momento que sea necesaria. ¡Muy genial!


Clase de importación PHPStorm

Hay una última cosa que podemos hacer para limpiar un poco más AppServiceProvider. Observe que usamos un espacio de nombres completamente calificado para usar el modelo de canal. Es decir, tuvimos que usar el espacio de nombres completo de \ App \ Channel :: all () para realizar la consulta en lugar de solo Channel :: all (). Por supuesto, esto se debe a que no hemos colocado una declaración de 'uso' en la parte superior del archivo para especificar que usaremos el modelo de canal en esta clase. Puede escribir esto fácilmente, pero sigamos adelante y usemos PHPStorm para importar automáticamente la clase para nosotros. Así es como se hace.


Primero, puede hacer clic en la clase que desea importar.
haga clic en el nombre de la clase phpstorm


Ahora, haga clic en Alt+Entery obtendrá un nuevo submenú. Aquí, puede optar por importar la clase.
haga clic en alt e ingrese phpstorm al mismo tiempo


Por último, puede ver que la clase se importa automáticamente para usted y todo es genial. Al igual que tú, eres genial.
clase de importación phpstorm


Cómo utilizar el resumen de View Composers

¿Tiene que usar compositores de vista en su proyecto? No, no es obligatorio. Sin embargo, es una buena manera de limpiar tanto sus archivos de vista * como * sus métodos de controlador. Si tiene una variable a la que necesitará acceder a través de una gran cantidad de archivos de vista en su proyecto, entonces los compositores de vista son en realidad una solución perfecta.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

outbrain

Páginas