Heim  >  Artikel  >  PHP-Framework  >  Laravel View Compositor

Laravel View Compositor

Guanhui
Guanhuinach vorne
2020-06-12 18:01:412874Durchsuche

Laravel View Compositor

Die früheste Version, mit der ich mit Laravel gearbeitet habe, war 4.2 und ich bin immer noch ein großer Fan. Natürlich habe ich im Laufe der Jahre viel gelernt und bin auf viele Probleme und Schwierigkeiten gestoßen, aber ich freue mich immer noch darauf, welche Änderungen Laravel als nächstes vornehmen wird.

Eine der aufregenden Funktionen von Laravel ist die Ansichtserweiterungsfunktion. Meiner Meinung nach ermöglicht eine sehr leistungsstarke Ansichtserweiterung Entwicklern die genaue Übergabe von Variablen aus der globalen an die Vorlage.

Wie verwende ich die View-Erweiterung?

Zuerst müssen Sie die beiden verschiedenen Arten von Ansichtserweiterungen kennen, nämlich klassenbasiert und abschlussbasiert.

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

Der Unterschied ist sehr offensichtlich, dass Verschlüsse einfach zu verwenden sind und keinen großen Aufwand für die Einrichtung erfordern, aber sie werden dazu führen, dass der Dienstanbieter zunehmend aufgebläht wird.

Andererseits führen Sie klassenbasierte Ansichtserweiterungen direkt zu isolierenden Designprinzipien. Ein weiterer Vorteil besteht darin, dass Sie diesen Codeabschnitt isoliert testen können und andere Entwickler den vorhandenen Code einfacher pflegen können.

In der Informatik ist Separation of Concerns (SoC) der Prozess der Zerlegung eines Computerprogramms in verschiedene Funktionen, die möglichst wenig funktionale Überschneidungen aufweisen. Ein Point of Concern ist jede interessante Stelle oder jeder Schwerpunkt im Programm . Fokus ist oft gleichbedeutend mit Funktionen oder Verhaltensweisen, und SoC-Fortschritte wurden traditionell mithilfe der Informationsversteckung durch Modularität und Kapselung erreicht.

Verstehen der Parameter der View::composer-Methode

In diesem Beispiel können Sie sehen, dass die View::composer-Methode zwei Parameter hat.

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

Der erste Parameter ist der Name der Ansicht, die Sie überwachen möchten. Dies kann ein String oder ein Array sein. Das heißt, wenn diese Vorlagenansicht gerendert wird, wird Ihr Ansichtsmanager ausgelöst und die Variablen werden an die Ansicht übergeben.

Sie können auch Platzhalter verwenden, anstatt alle Vorlagen manuell auszuwählen. Sie können bequem das Sternchen (*) verwenden, um Daten an jede Ansicht anzuhängen, auch an komplexe Vorlagen mit vielen Unterverzeichnissen.

Nutzungsszenarien sind in der Regel Seitenleisten- oder Navigationselemente, die in jeder Ansicht angezeigt werden müssen.

<?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;], ...);

Der zweite Parameter kann eine Abschlussfunktion oder der Klassenname des View Composers sein.

Beide Methoden erhalten einen $view-Parameter. Über diesen Parameter können Sie problemlos die Methode ->with() verwenden, um Variablen zur und aus der Ansicht hinzuzufügen.

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

Den View-Compositor einrichten

Sie wissen wahrscheinlich, dass Laravel für viele Dinge Anbieter verwendet, also können Sie erraten, was als nächstes kommt? Ja, wir müssen einen Dienstanbieter registrieren und innerhalb des Anbieters den View Compositor verwenden, den wir gerade kennengelernt haben.

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() 方法。
    }
}

Jetzt müssen Sie nur noch einen neuen Dienstanbieter in ~/config/app.php registrieren.

<?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,
        // ....
    ],
];

Das war's, jetzt können wir den Ansichtscompositor testen

Den Ansichtseditor testen

Angenommen, wir haben eine Seite namens /detail, Diese Seite erfordert Navigationsdaten in Form eines Arrays (unten).

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

Wir können unseren Ansichtseditor über die Methode ->assertViewHas() testen. Diese Methode kann erkennen, ob der Ansichtseditor die richtige Ansicht überwacht, und die Variable $navigation an sie übergeben.

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

Obwohl dieser Test einfach erscheint, können wir zumindest wissen, ob der Ansichtseditor funktioniert.

Fazit

Abschlussbasierte oder klassenbasierte Ansichtsmanager vereinfachen den Code und erleichtern Entwicklern die Verwendung. Es ist auch Teil von Laravel. Warum nutzen wir nicht einen so leistungsstarken Dienst?

Ich freue mich auf neue Funktionen in Laravel und hoffe, dass ich Ihnen etwas Neues zeigen kann.

Empfohlenes Tutorial: „Laravel Tutorial

Das obige ist der detaillierte Inhalt vonLaravel View Compositor. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Vorheriger Artikel:SQL-Debug-Tipps in LaravelNächster Artikel:SQL-Debug-Tipps in Laravel