Ya hemos aprendido a pasar datos a nuestras vistas con view()->with()
o utilizando view('plantilla', compact('data'))
, pero ¿Qué sucede si tenemos algún dato o información que necesitamos pasar a TODAS nuestras vistas? Como por ejemplo el nombre del proyecto, del usuario conectado o de un layout dinámico. Esto podemos lograrlo utilizando el método share
disponible en el Facade o helper de View, como aprenderás en el siguiente video:
Puedes utilizar el método share
del Facade View
de la siguiente forma:
View::share('nombreDeLaVariable', 'valor que quieres compartir')
Con esto lograrás compartir esta variable a través de todas las vistas. Por supuesto, necesitas que esta línea de código sea ejecutada antes y para ello Laravel te recomienda utilizar el método boot
de un Service Provider de tu aplicación, por ejemplo AppServiceProvider:
<?php namespace App\Providers; use Illuminate\Support\Facades\View; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { View::share('variableAqui', 'valor aquí'); } /** * Register the service provider. * * @return void */ public function register() { // } }
Si el archivo AppServiceProvider ya tiene demasiada información, entonces puedes generar un nuevo Service Provider con el comando:
php artisan make:provider ViewServiceProvider
Luego registrarlo en el arreglo providers
en el archivo config/app.php
y entonces utilizar View::share
en el método boot del nuevo Service Provider.
No olvides importar el Facade View con use Illuminate\Support\Facades\View;
en el Service Provider que quieras utilizar. También puedes utilizar el helper view()
y en dado caso no necesitas importar el facade:
view()->share('layout', 'layouts.'.config('html.theme'));
Continua aprendiendo:
- Cómo funcionan los Service Providers en Laravel
- Facades vs helpers vs inyección de dependencia en Laravel
Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.