Quiero tener algunos datos predeterminados accesibles en todas las vistas en mi aplicación Laravel 5.
Intenté buscarlo, pero solo encontré resultados para Laravel 4. He leído la documentación 'Compartir datos con todas las vistas' aquí, pero no puedo entender qué hacer. ¿Dónde se debe colocar el siguiente código?
View::share('data', [1, 2, 3]);
Gracias por tu ayuda.
*
en compositores de vistas, especialmente si usa consultas db, ya que se ejecuta para cada sub vista, componente, etc. incluido, para que pueda terminar ejecutando cientos de consultas innecesarias, lo mejor es usar la vista base, por ejemplo, diseños. la aplicación luego pasa los datos según sea necesario.Respuestas:
Este objetivo se puede lograr a través de diferentes métodos,
1. Usando BaseController
De la forma en que me gusta configurar las cosas, hago una
BaseController
clase que amplía la de LaravelController
y establezco varias cosas globales allí. Todos los demás controladores se extienden desdeBaseController
el controlador de Laravel en lugar de hacerlo.2. Usando filtro
Si sabe con certeza que desea configurar algo para las vistas en cada solicitud en toda la aplicación, también puede hacerlo a través de un filtro que se ejecuta antes de la solicitud; así es como trato con el objeto Usuario en Laravel.
O
Puedes definir tu propio filtro
y llamarlo a través de una simple llamada de filtro.
Actualización según la versión 5. *
3. Usando Middleware
Usando el
View::share
conmiddleware
4. Usando View Composer
View Composer también ayuda a enlazar datos específicos para ver de diferentes maneras. Puede vincular directamente la variable a una vista específica o a todas las vistas. Por ejemplo, puede crear su propio directorio para almacenar su archivo de composición de vista de acuerdo con los requisitos. y estos archivos de composición de vista a través del Servicio proporcionan interactuar con la vista.
El método Ver compositor puede usarse de manera diferente. El primer ejemplo puede parecerse:
Podrías crear un
App\Http\ViewComposers
directorio.Proveedor de servicio
Después de eso, agregue este proveedor a config / app.php en la sección "proveedores".
TestViewComposer
ViewName.blade.php
Este método podría ayudar solo para una vista específica. Pero si desea activar ViewComposer para todas las vistas, tenemos que aplicar este cambio único a ServiceProvider.
Referencia
Documentación Laravel
Para mayor aclaración Episodio de Laracast
Si todavía hay algo poco claro de mi parte, avíseme.
fuente
register()
método - no es opcional*
. Si no está utilizando el,*
entonces debería estar bien.Puede crear su propio proveedor de servicios (el
ViewServiceProvider
nombre es común) o puede usar el existenteAppServiceProvider
.En su proveedor seleccionado, ponga su código en el método de arranque.
Esto hará un
$data
variable sea accesible en todas sus vistas.Si en vez desee utilizar la fachada en lugar del ayudante, el cambio
view()->
aView::
pero no se olvide de teneruse View;
en la parte superior de su archivo.fuente
AppServiceProvider
está bien, pero si tiene algo más que eso, debería considerar crear un nuevo proveedor.composer update
también no funciona. En realidad no está disparandoboot()
en absoluto. Necesito compartir dos variables.Encontré que este es el más fácil. Cree un nuevo proveedor y use el
'*'
comodín para adjuntarlo a todas las vistas. Funciona en 5.3 también :-)fuente
La mejor manera sería compartir la variable usando
View::share('var', $value);
Problemas con la composición usando
"*"
:Considere el siguiente enfoque:
Desde una vista de hoja de ejemplo:
¿Lo que pasa?
GlobalComposer
clase se instancia 1000 veces usandoApp::make
.composing:some_partial_view_to_display_i
se maneja 1000 veces.compose
función dentro de laGlobalComposer
clase se llama 1000 veces.Pero la vista parcial
some_partial_view_to_display_i
no tiene nada que ver con las variables compuestas,GlobalComposer
pero aumenta considerablemente el tiempo de renderizado.Mejor enfoque?
Utilizando a lo
View::share
largo de un middleware agrupado.Actualizar
Si está utilizando algo que se calcula a través de la tubería de middleware, simplemente puede escuchar el evento adecuado o colocar el middleware de vista compartida en la última parte inferior de la tubería.
fuente
En la documentación:
Estoy de acuerdo con Marwelln, solo póngalo
AppServiceProvider
en la función de arranque:Recomiendo usar un nombre específico para la variable, para evitar confusiones o errores con otras variables no 'globales'.
fuente
La documentación es escuchar https://laravel.com/docs/5.4/views#view-composers pero lo desglosaré
Busque la aplicación de directorio \ Proveedores en el directorio raíz de su aplicación y cree el archivo ComposerServiceProvider.php y copie y pegue el siguiente texto en él y guárdelo.
Desde la raíz de su aplicación, abra Config / app.php y busque la sección Proveedores en el archivo y copie y pegue esta 'Aplicación \ Proveedores \ ComposerServiceProvider', a la matriz.
Al hacer esto, hemos creado el proveedor de servicios Composer. Cuando ejecuta su aplicación con la vista Perfil como http: // yourdomain / something / profile , se llama al proveedor de servicios ComposerServiceProvider y se instancia la clase App \ Http \ ViewComposers \ ProfileComposer llamando al método Composer debido al código siguiente dentro del Método de arranque o función.
Vaya a la aplicación de ruta de directorio / Http
Cree el directorio llamado ViewComposers
Cree el archivo ProfileComposer.php .
Ahora ve a tu vista o en este caso Profile.blade.php y agrega
y eso mostrará el recuento de usuarios en la página de perfil.
Para mostrar el recuento en todas las páginas cambie
A
fuente
Creo que la mejor manera es con
View Composers
. Si alguien vino aquí y quiere saber cómo hacerlo con View Composers, lea mi respuesta => ¿Cómo compartir una variable en todas las vistas?fuente
La documentación está aquí https://laravel.com/docs/5.4/views#view-composers pero lo desglosaré 1. Busque el directorio Proveedores en su directorio raíz y cree el ComposerServiceProvider.php con contenido
fuente
Dentro de su carpeta de configuración puede crear un nombre de archivo php, por ejemplo "variable.php" con el contenido a continuación:
Ahora dentro de todas las vistas puedes usarlo como
fuente
1) En (aplicación \ Proveedores \ AppServiceProvider.php)
2) en su modelo de usuario
3) en tu vista
fuente
Método Laravel 5.6: https://laravel.com/docs/5.6/views#passing-data-to-views
Ejemplo, al compartir una colección de modelos con todas las vistas (AppServiceProvider.php):
fuente
Tienes dos opciones:
1. Compartir a través de la función de arranque en App \ Providers \ AppServiceProvider
public function boot() { view()->share('key', 'value'); }
Y acceda a la variable $ key en cualquier archivo de vista.
Nota: Recuerde que no puede acceder a los datos actuales de Sesión, Autenticación, Ruta aquí. Esta opción es buena solo si desea compartir datos estáticos. Suponga que desea compartir algunos datos basados en el usuario actual, la ruta o cualquier variable de sesión personalizada que no podrá hacer con esto.
'aliases' => [ ..., 'Helper' => App\HelperClass\Helper::class, ],
y crea Helper.php en la carpeta HelperClass dentro de la carpeta App
y acceder a él en cualquier lugar como
Helper::Sample()
No estará restringido aquí para usar Auth, Route, Session o cualquier otra clase.
fuente