voir
- Créer la première vue disponible
- Transmettre les paramètres à la vue "Ajouter View Composer à plusieurs vues" Transmettre les paramètres aux vues
- Partager les données avec toutes les vues Afficher le compositeur
Création de vues
{tip} Si vous souhaitez en savoir plus sur la façon d'écrire des modèles Blade ? Commencez par consulter la documentation complète de Blade .
Les vues contiennent le HTML de l'application et séparent la logique du contrôleur/application de la logique de présentation. Les fichiers de vue sont stockés dans le répertoire resources/views
. Une vue simple ressemble à ceci : resources/views
目录下。一个简单的视图如下所示:
<!-- 此视图文件位置 resources/views/greeting.blade.php --> <html> <body> <h1>Hello, {{ $name }}</h1> </body> </html>
该视图文件位于 resources/views/greeting.blade.php
,可以使用全局辅助函数 view
来返回:
Route::get('/', function () { return view('greeting', ['name' => 'James']); });
如您所见,传递给 view
帮助器的第一个参数对应于 resources/views
目录中视图文件的名称。 第二个参数是应该可供视图使用的数据数组。 在这种情况下,我们传递 name
变量,该变量使用 Blade syntax 显示在视图中。
当然,视图文件也可以嵌套在 resources/views
目录的子目录中。「点」符号可以用来引用嵌套视图。例如,如果你的视图存储在 resources/views/admin/profile.blade.php
,则可以这样引用它:
return view('admin.profile', $data);
判断视图文件是否存在
如果需要判断视图文件是否存在,可以使用 View
facade. 如果视图文件存在,exists
方法会返回 true
:
use Illuminate\Support\Facades\View;if (View::exists('emails.customer')) { // }
创建第一个可用视图
使用 first
方法,你可以创建存在于给定数组视图中的第一个视图。 如果你的应用程序或开发的第三方包允许定制或覆盖视图,这非常有用:
return view()->first(['custom.admin', 'admin'], $data);
当然,你也可以通过 View
facade 调用这个方法:
use Illuminate\Support\Facades\View;return View::first(['custom.admin', 'admin'], $data);
向视图传递参数
正如您在前面的示例中所看到的,您可以将一组数据传递给视图:
return view('greetings', ['name' => 'Victoria']);
以这种方式传递信息时,数据应该是具有键 / 值对的数组。 在视图中,您可以使用相应的键访问每个值,例如 <?php echo $key; ?>
。 作为将完整的数据数组传递给 view
辅助函数的替代方法,您可以使用 with
方法将各个数据片段添加到视图中:
return view('greeting')->with('name', 'Victoria');
与所有视图共享数据
如果需要共享一段数据给应用程序的所有视图,你可以在服务提供器的 boot
方法中调用视图 Facade 的 share
方法。例如,可以将它们添加到 AppServiceProvider
<?php namespace App\Providers; use Illuminate\Support\Facades\View; class AppServiceProvider extends ServiceProvider{ /** * Bootstrap any application services. * * @return void */ public function boot() { View::share('key', 'value'); } /** * Register the service provider. * * @return void */ public function register() { // } }Le fichier de vue se trouve dans
resources/views/greeting.blade.php
et peut être renvoyé à l'aide de la fonction d'assistance globale view
: <?php namespace App\Providers; use Illuminate\Support\Facades\View; use Illuminate\Support\ServiceProvider; class ViewServiceProvider extends ServiceProvider{ /** * Register bindings in the container. * * @return void */ public function boot() { // Using class based composers... View::composer( 'profile', 'App\Http\View\Composers\ProfileComposer' ); // Using Closure based composers... View::composer('dashboard', function ($view) { // }); } /** * Register the service provider. * * @return void */ public function register() { // } }Comme vous pouvez le constater, le premier paramètre passé au helper
view
correspond au nom du fichier de vue dans le répertoire resources/views
. Le deuxième paramètre est un tableau de données qui doivent être disponibles pour la vue. Dans ce cas, nous transmettons la variable name
, qui est affichée dans la vue en utilisant la syntaxe Blade. Bien sûr, les fichiers de vue peuvent également être imbriqués dans des sous-répertoires du répertoire resources/views
. La notation « point » peut être utilisée pour faire référence à des vues imbriquées. Par exemple, si votre vue est stockée dans resources/views/admin/profile.blade.php
, vous pouvez la référencer comme ceci : <?php namespace App\Http\View\Composers; use Illuminate\View\View; use App\Repositories\UserRepository; class ProfileComposer{ /** * The user repository implementation. * * @var UserRepository */ protected $users; /** * Create a new profile composer. * * @param UserRepository $users * @return void */ public function __construct(UserRepository $users) { // Dependencies automatically resolved by service container... $this->users = $users; } /** * Bind data to the view. * * @param View $view * @return void */ public function compose(View $view) { $view->with('count', $this->users->count()); } }
Déterminer si le fichier de vue existe
🎜Si vous devez déterminer si le fichier de vue existe, vous pouvez utiliser la façadeVue
. Si le fichier de vue existe, le < La méthode code>exists retournera true
: 🎜View::composer( ['profile', 'dashboard'], 'App\Http\View\Composers\MyViewComposer' );
Créer la première vue disponible
🎜 Utilisez la méthodefirst
, vous pouvez créer la première vue qui existe dans une vue tableau donnée. Ceci est utile si votre application ou package tiers développé permet de personnaliser ou de remplacer les vues : 🎜View::composer('*', function ($view) { // });🎜 Bien sûr, vous pouvez également appeler cette méthode via la façade
View
: 🎜View::creator('profile', 'App\Http\View\Creators\ProfileCreator');🎜🎜🎜
<?php echo $key ?>
. Au lieu de transmettre le tableau de données complet à la fonction d'assistance view
, vous pouvez utiliser la méthode with
pour ajouter des fragments de données individuels à la vue : 🎜rrreee🎜🎜🎜Partage de données avec toutes les vues
🎜Si vous avez besoin de partager un donnée à l'application Pour toutes les vues du programme, vous pouvez appeler la méthodeshare
de la vue Façade dans la méthode boot
du fournisseur de services. Par exemple, vous pouvez les ajouter à AppServiceProvider
ou générer un fournisseur de services distinct pour eux : 🎜rrreee🎜🎜🎜🎜🎜🎜View Composers
Les compositeurs de vues sont des rappels ou des méthodes de classe qui sont appelées lorsqu'une vue est rendue. Si vous souhaitez lier des données à une vue à chaque fois qu'elles sont rendues, un compositeur de vue peut vous aider à organiser cette logique en un seul endroit.
Dans l'exemple suivant, nous enregistrerons le compositeur de vues auprès d'un fournisseur de services. Utilisez la façade View
pour accéder à l'implémentation du contrat IlluminateContractsViewFactory
sous-jacente. Par défaut, Laravel n'a pas de répertoire pour stocker les compositeurs de vues. Vous devez recréer le répertoire en fonction de vos besoins, par exemple : app/Http/View/Composers
:View
facade 来访问底层的 IlluminateContractsViewFactory
契约实现。默认情况下,Laravel 没有存放视图合成器的目录,你需要根据需求来重新建立目录,例如: app/Http/View/Composers
:
{note} 注意,如果你创建了新的一个服务提供器来存放你注册视图合成器的代码,那么你需要将这个服务提供器添加到配置文件
config/app.php
的providers
数组中。
到此我们已经注册了视图合成器,每次渲染 profile
视图时都会执行 ProfileComposer@compose
方法。那么下面我们来定义视图合成器的这个类吧:
视图合成器的 compose
方法会在视图渲染之前被调用,并传入一个 IlluminateViewView
实例。你可以使用 with
方法将数据绑定到视图。
{tip} 所有的视图合成器都会通过 服务容器 , 进行解析,所以你可以在视图合成器的构造函数中类型提示需要注入的依赖项。
将视图合成器添加到多个视图
通过将一组视图作为第一个参数传入 composer
方法,将一个视图合成器添加到多个视图:
composer
方法同时也接受通配符 *
,表示将一个视图合成器添加到所有视图:
视图构造器
视图 creators 和视图合成器非常相似。唯一不同之处在于:视图构造器在视图实例化之后立即执行,而视图合成器在视图即将渲染时执行。使用 creator
rrreee
. {note} Remarque : si vous créez un nouveau fournisseur de services pour stocker votre code pour enregistrer le compositeur de vues, vous devez alors ajouter ce fournisseur de services aux providers< du fichier de configuration config/app.php Tableau
/code>. La méthode compose
du compositeur de vue sera appelée avant le rendu de la vue, et une instance IlluminateViewView
sera transmise dans . Vous pouvez lier des données à une vue à l'aide de la méthode with
.
🎜{tip} Tous les compositeurs de vues seront résolus via le conteneur de services, vous pouvez donc indiquer les dépendances qui doivent être injectées dans le constructeur du compositeur de vues. 🎜
Ajouter un compositeur de vues à plusieurs vues
🎜En passant un tableau de vues comme premier argument La méthode composer
ajoute une vue composer à plusieurs vues : 🎜rrreee🎜La méthode composer
accepte également les caractères génériques *
, ce qui signifie ajouter une vue. Les compositeurs sont ajoutés à toutes les vues : 🎜rrreeeConstructeurs de vues
🎜Les créateurs de vues et les compositeurs de vues se ressemblent beaucoup. La seule différence est que le constructeur de vue est exécuté immédiatement après l'instanciation de la vue, tandis que le compositeur de vue est exécuté lorsque la vue est sur le point d'être rendue. Utilisez la méthodecreator
pour enregistrer le constructeur de vue : 🎜rrreee🎜Cet article a été publié pour la première fois sur le site Web 🎜LearnKu.com🎜. 🎜🎜