laravel控制器中的全局变量


Global variable in laravel controller

我希望$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 }}

试试这个:

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

你可以在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');
});