Domanda Laravel 5: variabile globale della vista Blade disponibile in tutti i modelli


Come posso in Laravel 5 creare una variabile globale che sarà disponibile in tutti i modelli Blade?


44
2018-04-18 10:06


origine


risposte:


Opzione 1:

Puoi usare view::share() così:

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

}

Opzione 2: Usa un compositore:

  1. Crea un file di composizione su app\Composers\HomeComposer.php

NB: creare app\Composers se non esiste

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

Quindi puoi attaccare il compositore a qualsiasi vista facendo questo

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

}

64
2018-04-18 10:46



Crea un nuovo fornitore di servizi come suggerito qui

Aggiungi il tuo nuovo fornitore di servizi al file di configurazione (config / app.php).

Nel metodo di avvio del tuo nuovo fornitore di servizi usa:

View::share( 'something_cool', 'this is a cool shared variable' );

Ora sei pronto per utilizzare $ something_cool in tutte le tue visualizzazioni.

Spero che questo ti aiuti.


18
2018-04-18 10:44



Cercando la soluzione dello stesso problema e trovato la migliore soluzione nella documentazione di Laravel. Basta usare View::share in AppServiceProvider come questo:

View::share('key', 'value');

Dettagli Qui.


9
2018-04-09 14:58



Puoi farlo con guarda i compositori. Visualizza i compositori vengono eseguiti quando viene caricato un modello. È possibile passare una chiusura con funzionalità aggiuntive per quella vista. Con i compositori di visualizzazione è possibile utilizzare i caratteri jolly. Per creare un compositore di viste per ogni vista, basta usare a *.

View::composer('*', function($view)
{
    $view->with('variable','Test value');
});

Puoi anche farlo senza una chiusura, come puoi vedere nei documenti.

View::composer('*', 'App\Http\ViewComposers\ProfileComposer');

La classe del compositore del profilo deve avere un metodo di composizione.

Visualizza i compositori vengono eseguiti quando viene visualizzata una vista. Laravel ha anche visto i creatori. Questi vengono eseguiti quando una vista viene istanziata.

Puoi anche scegliere di usare a BaseController con un metodo setupLayout. Quindi ogni vista che caricherete viene caricata tramite il metodo setupLayout che aggiunge alcuni dati aggiuntivi. Tuttavia, usando i compositori di visualizzazione sei sicuro che il codice sia eseguito. Ma con l'approccio BaseController hai più flessibilità perché puoi saltare il caricamento dei dati extra.

EDIT: Come accennato da Nic Gutierrez puoi anche usare view share.


7
2018-04-18 10:43



Inoltre, puoi farlo nel Route.php file:

view()->share('variableName', $variable);

3
2017-10-10 13:34



puoi visualizzarlo nella sessione, puoi definirlo nel file .env (vars statici)


-6
2018-04-18 15:07