How can I in Laravel 5 make global variable which will be available in all Blade templates?
This tutorial shows how to define global variables for Blade templates in Laravel 9 application. The View facade has share method which allows to inject a variable to each Blade template. Create a new service provider and call the share method within boot method. Register the service provider in the config/app.php file.
Blade is the simple, yet powerful templating engine that is included with Laravel. Unlike some PHP templating engines, Blade does not restrict you from using plain PHP code in your templates.
There might be a case that the same variable should be passed to all Blade templates. It can done on each controller. However, it is not perfect solution. This tutorial shows how to define global variables for Blade templates in Laravel 9 application.
Blade template files use the .blade.phpfile extension and are typically stored in the resources/viewsdirectory. Blade views may be returned from routes or controller using the global viewhelper. Of course, as mentioned in the documentation on views, data may be passed to the Blade view using the viewhelper's second argument:
Option 1:
You can use view::share()
like so:
<?php namespace App\Http\Controllers; use View; //You can create a BaseController: class BaseController extends Controller { public $variable1 = "I am Data"; public function __construct() { $variable2 = "I am Data 2"; View::share ( 'variable1', $this->variable1 ); View::share ( 'variable2', $variable2 ); View::share ( 'variable3', 'I am Data 3' ); View::share ( 'variable4', ['name'=>'Franky','address'=>'Mars'] ); } } class HomeController extends BaseController { //if you have a constructor in other controllers you need call constructor of parent controller (i.e. BaseController) like so: public function __construct(){ parent::__construct(); } public function Index(){ //All variable will be available in views return view('home'); } }
Option 2: Use a composer:
app\Composers\HomeComposer.php
NB: create app\Composers
if it does not exists
<?php namespace App\Composers; class HomeComposer { public function compose($view) { //Add your variables $view->with('variable1', 'I am Data') ->with('variable2', 'I am Data 2'); } }
Then you can attached the composer to any view by doing this
<?php namespace App\Http\Controllers; use View; class HomeController extends Controller{ public function __construct(){ View::composers([ 'App\Composers\HomeComposer' => ['home'] //attaches HomeComposer to home.blade.php ]); } public function Index(){ return view('home'); } }
Option 3: Add Composer to a Service Provider, In Laravel 5 I prefer having my composer in App\Providers\ViewServiceProvider
Create a composer file at app\Composers\HomeComposer.php
Add HomeComposer to App\Providers\ViewServiceProvider
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use View; use App\Composers\HomeComposer; use Illuminate\Support\Facades\Blade; class ViewServiceProvider extends ServiceProvider { /** * Register any application services. * * @return void */ public function register() { // } /** * Bootstrap any application services. * * @return void */ public function boot() { //add to all views view()->composer('*', HomeComposer::class); //add to only home view //view()->composer('home', HomeComposer::class); } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With