Maison >cadre php >Laravel >Compositeur de vues Laravel

Compositeur de vues Laravel

Guanhui
Guanhuiavant
2020-06-12 18:01:412932parcourir

Compositeur de vues Laravel

La première version avec laquelle j'ai travaillé avec Laravel était la 4.2, et je suis toujours un grand fan. Bien sûr, j'ai beaucoup appris au fil des années et rencontré beaucoup de problèmes et de difficultés, mais j'attends toujours avec impatience les prochains changements que Laravel apportera.

L'une des fonctionnalités intéressantes fournies par Laravel est la fonction d'extension de vue. À mon avis, une extension de vue très puissante permet aux développeurs de transmettre avec précision les variables du global au modèle.

Comment utiliser l'extension View ?

Vous devez d'abord connaître les deux différents types d'extensions de vue, à savoir basées sur les classes et basées sur les fermetures.

<?php 
View::composer(&#39;profile&#39;, function ($view) {
    $view->with(&#39;user&#39;, [&#39;...&#39;]);
});
// 或者
View::composer(&#39;profile&#39;, &#39;App\Http\ViewComposers\ProfileComposer&#39;);

La différence est très évidente. Les fermetures sont faciles à utiliser et ne nécessitent pas beaucoup d'efforts à mettre en place, mais elles entraîneront une surcharge croissante du fournisseur de services.

D'un autre côté, les extensions de vue basées sur les classes vous conduisent directement à isoler les principes de conception. Un autre avantage est que vous pouvez tester ce morceau de code de manière isolée et que d'autres développeurs peuvent plus facilement maintenir le code existant.

En informatique, la séparation des préoccupations (SoC) est le processus de décomposition d'un programme informatique en différentes fonctionnalités qui ont le moins de chevauchement fonctionnel possible. Un point de préoccupation est tout endroit ou objectif intéressant dans le programme. . Souvent, l'accent est synonyme de fonctionnalités ou de comportements, et les progrès des SoC ont traditionnellement été réalisés à l'aide de la dissimulation des informations grâce à la modularité et à l'encapsulation.

Comprendre les paramètres de la méthode View::composer

Dans cet exemple, vous pouvez voir que la méthode View::composer a deux paramètres.

<?php 
View::composer(&#39;profile&#39;, function ($view) {
    $view->with(&#39;user&#39;, [&#39;...&#39;]);
});
// 或者
View::composer(&#39;profile&#39;, &#39;App\Http\ViewComposers\ProfileComposer&#39;);

Le premier paramètre est le nom de la vue que vous souhaitez surveiller, qui peut être une chaîne ou un tableau. Cela signifie que si cette vue modèle est rendue, votre gestionnaire de vues sera déclenché et les variables seront transmises à la vue.

Vous pouvez également utiliser des caractères génériques au lieu de sélectionner manuellement tous les modèles. Vous pouvez facilement utiliser l'astérisque (*) pour ajouter des données à chaque vue, même aux modèles complexes avec de nombreux sous-répertoires.

Les scénarios d'utilisation sont généralement des éléments de barre latérale ou de navigation qui doivent être affichés dans chaque vue.

<?php
// 为一个视图添加合成器: ~/resources/views/profile
View::composer(&#39;profile&#39;, ...);
// 为多个视图添加: ~/resources/views/profile, ~/resources/views/profile_edit and ~/resources/views/profile_settings
View::composer([&#39;profile&#39;, &#39;profile_edit&#39;, &#39;profile_settings&#39;], ...);
// 目录通配符: all files in ~/resources/views/pages/*
View::composer([&#39;*pages.*&#39;], ...);

Le deuxième paramètre peut être une fonction de fermeture ou le nom de classe du compositeur de vue.

Les deux méthodes reçoivent un paramètre $view. Grâce à ce paramètre, vous pouvez facilement utiliser la méthode ->with() pour ajouter des variables vers et depuis la vue.

<?php 
View::composer(&#39;*&#39;, function ($view) {
    $view->with(&#39;breadcrumb&#39;, [&#39;item 1&#39;, &#39;item &#39;]);
});
// 或者 
View::composer(&#39;*&#39;, &#39;App\Http\ViewComposers\NavigationComposer&#39;);
// compose 方法也有 $view 参数 
namespace App\Http\View\Composers;
use Illuminate\View\View;
class NavigationComposer
{
    /**
     * @param  View  $view
     * @return void
     */
    public function compose(View $view)
    {
        $view->with(&#39;navigation&#39;, [
            &#39;items1&#39;, &#39;items2&#39;, &#39;item3&#39;
        ]);
    }
}

Configurer le compositeur de vues

Vous savez probablement que Laravel utilise des fournisseurs pour beaucoup de choses, vous pouvez donc deviner la suite ? Oui, nous devons enregistrer un fournisseur de services et, au sein du fournisseur, utiliser le compositeur de vues que nous venons de découvrir.

ViewComposerServiceProvider.php

<?php
namespace App\Providers;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider
{
    public function boot()
    {
        View::composer(
            &#39;pages/*&#39;, &#39;App\Http\View\Composers\NavigationComposer&#39;
        );
    }
    /**
     * 注册服务提供者
     *
     * @return void
     */
    public function register()
    {
        // TODO: 实现 register() 方法。
    }
}

Il ne reste plus qu'à enregistrer un nouveau fournisseur de services dans ~/config/app.php.

<?php
return [
  &#39;providers&#39; => [
        // ....
        /*
         * 应用的服务提供者...
         */
        App\Providers\AppServiceProvider::class,
        App\Providers\AuthServiceProvider::class,
        App\Providers\EventServiceProvider::class,
        App\Providers\RouteServiceProvider::class,
        App\Providers\ViewComposerServiceProvider::class,
        // ....
    ],
];

C'est tout, maintenant nous pouvons tester le compositeur de vue

Tester l'éditeur de vue

Supposons que nous ayons une page appelée /detail, cette page nécessite des données de navigation sous la forme d'un tableau (ci-dessous).

<?php
namespace App\Http\View\Composers;
use Illuminate\View\View;
class NavigationComposer
{
    /**
     * @param  View  $view
     * @return void
     */
    public function compose(View $view)
    {
        $view->with(&#39;navigation&#39;, [
            &#39;items1&#39;, &#39;items2&#39;, &#39;item3&#39;
        ]);
    }
}

Nous pouvons tester notre éditeur de vue via la méthode ->assertViewHas(). Cette méthode peut détecter si l'éditeur de vue écoute la bonne vue et lui transmettre la variable $navigation.

<?php
class ViewComposerTest extends TestCase
{
    /**
     * @return void
     */
    public function testDetailHasNavigationItems()
    {
        $this->get(&#39;/detail&#39;)->assertViewHas(&#39;navigation&#39;);
    }
}

Bien que ce test semble simple, on peut au moins savoir si l'éditeur de vues fonctionne.

Conclusion

Les gestionnaires de vues basés sur la fermeture ou sur les classes simplifieront le code et faciliteront son utilisation par les développeurs. Cela fait également partie de Laravel, pourquoi ne pas utiliser un service aussi puissant.

J'attends avec impatience les nouvelles fonctionnalités de Laravel et j'espère pouvoir vous montrer quelque chose de nouveau.

Tutoriel recommandé : "Tutoriel Laravel"

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer