Global variable in laravel controller

I want the $year variable to be available in all the functions of my PagesController . I tried this code but I failed.

 class PagesController extends Controller { public function __construct() { $dt = Carbon::parse(); $year = $dt->year; } public function index() { return view('pages.index'); } public function about() { return view('pages.about', compact('year')); } public function create() { return view('pages.create', compact('year')); } } 
+8
php global-variables laravel
source share
3 answers

1. Option: use AppServiceProvider

In this case, $ year is available for all views!

 <?php namespace App\Providers; use Carbon; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { view()->share('year', Carbon::parse()->year); } /** * Register the service provider. * * @return void */ public function register() { // } } 

2. Option: use Composer View

In this case, the variable is available only for those species in which you need it.

Remember to add the newly created provider to config/app.php !

 <?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Carbon; class ComposerServiceProvider extends ServiceProvider { /** * Register bindings in the container. * * @return void */ public function boot() { // Using Closure based composers... view()->composer('pages.*', function ($view) { $view->with('year', Carbon::parse()->year); }); } /** * Register the service provider. * * @return void */ public function register() { // } } 

3. Use Blades @ inject-method

In views that need a year, you can enter a Carbon instance as follows:

 @inject('carbon', 'Carbon\Carbon') {{ $carbon->parse()->year }} 
+17
source share

Try the following:

 //give private declaration private $year; public function __construct() { $dt = Carbon::parse(); $this->year = $dt->year; } public function index() { return view('pages.index'); } public function about() { $year = $this->year; return view('pages.about',compact('year') ); } public function create() { $year = $this->year; return view('pages.create',compact('year') ); } 
+4
source share

You can create a global singleton in App :: before event

 App::before(function($request) { App::singleton('customYear', function(){ $dt = Carbon::parse(); $customYear = $dt->year; return $customYear; }); // If you use this line of code then it'll be available in any view View::share('customYear', app('customYear')); //To get the same data in any controller you may use: $customYear = app('customYear'); }); 
+4
source share

All Articles