Я хочу, чтобы переменная $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')); } }
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') ); }