Глобальная переменная в контроллере laravel

Я хочу, чтобы переменная $year была доступна во всех функциях моего PagesController . Я пробовал этот код, но мне это не удалось.

 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')); } } 

Related of "Глобальная переменная в контроллере laravel"

1. Вариант: используйте AppServiceProvider

В этом случае $ year доступен для ВСЕХ просмотров!

 <?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. Вариант: используйте View Composer

В этом случае переменная доступна только для видов, в которых она вам нужна.

Не забудьте добавить вновь созданного провайдера в 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. Используйте Blades @ inject-method

В представлениях, которым нужен год, вы можете ввести экземпляр Carbon следующим образом:

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

Вы можете создать глобальный синглтон в приложении :: 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'); }); 

Попробуй это:

 //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') ); }