所有模板中均提供全局Blade视图变量

所有模板中均提供全局Blade视图变量

本文介绍了Laravel 5-所有模板中均提供全局Blade视图变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在Laravel 5中使全局变量在所有Blade模板中可用?

How can I in Laravel 5 make global variable which will be available in all Blade templates?

推荐答案

选项1:

您可以像这样使用view::share():

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

}

选项2:使用作曲家:

  1. app\Composers\HomeComposer.php
  2. 创建一个作曲家文件
  1. Create a composer file at app\Composers\HomeComposer.php

NB:如果不存在,请创建app\Composers

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

然后您可以通过此操作将作曲家附加到任何视图

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

}

选项3:将Composer添加到服务提供商中,在Laravel 5中,我更喜欢将Composer安装在App \ Providers \ ViewServiceProvider

Option 3:Add Composer to a Service Provider, In Laravel 5 I prefer having my composer in App\Providers\ViewServiceProvider

  1. app\Composers\HomeComposer.php

将HomeComposer添加到App \ Providers \ ViewServiceProvider

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

这篇关于Laravel 5-所有模板中均提供全局Blade视图变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-12 10:04