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.
