Laravel 5 – variable de vue de lame globale disponible dans tous les modèles

Comment puis-je, dans Laravel 5, créer une variable globale qui sera disponible dans tous les modèles de lames?

Option 1:

Vous pouvez utiliser view::share() comme ceci:

 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 (ie BaseController) like so: public function __construct(){ parent::__construct(); } public function Index(){ //All variable will be available in views return view('home'); } } 

Option 2: Utiliser un compositeur:

  1. Créez un fichier de composition à l’ app\Composers\HomeComposer.php

NB: créer une app\Composers si elle n’existe pas

 with('variable1', 'I am Data') ->with('variable2', 'I am Data 2'); } } 

Ensuite, vous pouvez attacher le compositeur à n’importe quelle vue en faisant cela

  ['home'] //attaches HomeComposer to home.blade.php ]); } public function Index(){ return view('home'); } } 

Créez un nouveau fournisseur de services comme suggéré ici

Ajoutez votre nouveau fournisseur de services au fichier de configuration (config / app.php).

Dans la méthode de démarrage de votre nouveau fournisseur de services, utilisez:

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

Vous êtes maintenant prêt à utiliser $ something_cool dans toutes vos vues.

J’espère que cela t’aides.

Rechercher une solution au même problème et trouver la meilleure solution dans la documentation de Laravel. Il suffit d’utiliser View::share dans AppServiceProvider comme ceci:

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

Détails ici .

Vous pouvez le faire avec les compositeurs de vue . Les compositeurs de vue sont exécutés lorsqu’un modèle est chargé. Vous pouvez transmettre une fermeture avec des fonctionnalités supplémentaires pour cette vue. Avec les compositeurs de vue, vous pouvez utiliser des caractères génériques. Pour créer un compositeur de vues pour chaque vue, utilisez simplement un * .

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

Vous pouvez également le faire sans fermeture, comme vous pouvez le voir dans les documents.

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

La classe de composition de profil doit avoir une méthode de composition.

Les compositeurs de vue sont exécutés lorsqu’une vue est rendue. Laravel a également vu des créateurs. Celles-ci sont exécutées lorsqu’une vue est instanciée.

Vous pouvez également choisir d’utiliser un BaseController avec une méthode setupLayout. Ensuite, chaque vue que vous allez charger est chargée via la méthode setupLayout qui ajoute des données supplémentaires. Cependant, en utilisant les compositeurs de vue, vous êtes presque certain que le code est exécuté. Mais avec l’approche BaseController, vous avez plus de flexibilité car vous pouvez ignorer le chargement des données supplémentaires.

EDIT: Comme mentionné par Nic Gutierrez, vous pouvez également utiliser view share.

Aussi, vous pouvez le faire dans le fichier Route.php :

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

vous pouvez le flasher dans la session, vous pouvez le définir dans le fichier .env (vars statiques)