Plusieurs fois au cours du processus de développement, des valeurs sont attribuées aux modèles publics, tels que la barre de navigation supérieure, le bas de la page, etc. Il est impossible d'attribuer des valeurs dans chaque contrôleur.
La solution dans Laravel est la suivante :
Modifier
AppProvidersAppServiceProvider
Ajouter
Vue dans le boot method ()->composer('common.header',function ($view){ //common.header correspond au modèle Blade
$view->with('key', 'value');
} );
Vous pouvez également attribuer des valeurs à tous les modèles
View()->share('key', 'value');
====================================== ==
Les compositeurs de vues sont liés aux vues. Ils sont utilisés dans la fonction boot() d'un fournisseur de services. Lorsqu'une vue est chargée, en raison du rôle de compositeur de vues, elle appelle un certain. fonction et passe les paramètres.
1, créez un fournisseur de services
php artisan make:provider ComposerServiceProvider
puis ajoutez ComposerServiceProvider à config/app.php
2, écrivez view composer
public function boot() { view()->composer( 'app', //模板名 'App\Http\ViewComposers\MovieComposer' //方法名或者类中的方法 ); }
ce qui signifie qu'une fois app.blade.php chargé, la fonction AppHttpViewComposersMovieComposer
dans composer
est exécutée (la raison pour laquelle elle est exécutée ici La fonction composer est la fonction par défaut), si vous souhaitez la modifier, il suffit de
view()->composer('app','AppHttpViewComposersMovieComposer<a href="https://my.oschina.net/u/862816" class="referer" target="_blank">@foobar</a>');
//Votre propre méthode définie
La fonction foobar est exécutée ici
Écrivez ceci dans AppHttpViewComposersMovieComposer.php
<?php namespace App\Http\ViewComposers; use Illuminate\View\View;//**记得引入这个啊(因为在composer函数参数里使用了View类)** class MovieComposer { public $movieList = []; public function __construct() { $this->movieList = [ 'Shawshank redemption', 'Forrest Gump', ]; } public function compose(View $view) { $view->with('latestMovie'); } }
3, autre
Lorsque tous les modèles sont requis, utilisez *expression régulière
view()->composer('*', function (View $view) { //logic goes here });
Si vous souhaitez spécifier plusieurs vues à utiliser, enveloppez-les dans des tableaux
view()->composer(['nav', 'footer'],'App\Http\ViewComposers\MovieComposer'); 或者 view()->composer(['admin.admin'], function ($view){ $column = $this->object_array(DB::table('column')->get()); foreach($column as $k=>$v){ $chid = explode(',',$v['childid']); foreach($chid as $value){ $column[$k]['chname'][] = $this->object_array(DB::table('column_child')->where('id',$value)->first()); } } $view->with('columns',$column); });
Pour plus d'articles techniques liés à PHP, veuillez visiter le Tutoriel PHP colonne pour apprendre !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!