Ich möchte, dass einige Standarddaten in allen Ansichten meiner Laravel 5-Anwendung verfügbar sind.
Ich habe versucht, danach zu suchen, aber nur Ergebnisse für Laravel 4 gefunden. Ich habe die Dokumentation "Daten mit allen Ansichten teilen " hier gelesen , kann aber nicht verstehen, was zu tun ist. Wo soll der folgende Code platziert werden?
View::share('data', [1, 2, 3]);
Danke für Ihre Hilfe.
*
On-View-Composer verwenden, insbesondere wenn Sie DB-Abfragen verwenden, da diese für jede enthaltene Unteransicht, Komponente usw. ausgeführt werden, sodass Sie möglicherweise Hunderte unnötiger Abfragen ausführen. Verwenden Sie am besten die Basisansicht, z. B. Layouts. App dann Daten nach Bedarf weitergeben.Antworten:
Dieses Ziel kann durch verschiedene Methoden erreicht werden,
1. Verwenden von BaseController
So wie ich Dinge gerne einrichte, mache ich eine
BaseController
Klasse, die Laravels eigene erweitertController
, und richte dort verschiedene globale Dinge ein. Alle anderen Controller erstrecken sich dann vonBaseController
Laravels Controller.2. Filter verwenden
Wenn Sie wissen, dass für jede Anforderung in der gesamten Anwendung etwas für Ansichten eingerichtet werden soll, können Sie dies auch über einen Filter tun, der vor der Anforderung ausgeführt wird. So gehe ich mit dem Benutzerobjekt in Laravel um.
ODER
Sie können Ihren eigenen Filter definieren
und rufen Sie es durch einfachen Filteraufruf auf.
Update gemäß Version 5. *
3. Middleware verwenden
Mit dem
View::share
mitmiddleware
4. Verwenden von View Composer
View Composer hilft auch dabei, bestimmte Daten zu binden, um sie auf unterschiedliche Weise anzuzeigen. Sie können Variablen direkt an eine bestimmte Ansicht oder an alle Ansichten binden. Zum Beispiel können Sie ein eigenes Verzeichnis erstellen, um Ihre View Composer-Datei je nach Anforderung zu speichern. und diese View Composer-Datei über Service bieten Interaktion mit der Ansicht.
Die View Composer-Methode kann auf unterschiedliche Weise verwendet werden. Das erste Beispiel kann ähnlich aussehen:
Sie könnten ein
App\Http\ViewComposers
Verzeichnis erstellen .Dienstleister
Fügen Sie danach diesen Anbieter zu config / app.php im Abschnitt "Anbieter" hinzu.
TestViewComposer
ViewName.blade.php
Diese Methode kann nur für bestimmte Ansichten hilfreich sein. Wenn Sie jedoch ViewComposer für alle Ansichten auslösen möchten, müssen Sie diese einzelne Änderung auf ServiceProvider anwenden.
Referenz
Laravel-Dokumentation
Zur weiteren Klärung Laracast Episode
Wenn mir noch etwas unklar ist, lass es mich wissen.
quelle
register()
Methode - sie ist nicht optional*
. Wenn Sie das nicht verwenden*
, sollte es Ihnen gut gehen.Sie können entweder Ihren eigenen Dienstanbieter erstellen (
ViewServiceProvider
Name ist üblich) oder den vorhandenen verwendenAppServiceProvider
.Geben Sie in Ihrem ausgewählten Anbieter Ihren Code in die Startmethode ein.
Dies wird eine machen
$data
Variable in all Ihren Ansichten zugänglich.Wenn Sie lieber die Fassade als den Helfer verwenden möchten, wechseln Sie
view()->
zu,View::
aber vergessen Sie nicht, sieuse View;
oben in Ihrer Datei zu haben.quelle
AppServiceProvider
Ordnung, aber wenn Sie mehr als das haben, sollten Sie in Betracht ziehen, einen neuen Anbieter zu erstellen.composer update
auch nicht funktioniert. Eigentlich feuert es dasboot()
überhaupt nicht ab. Ich muss zwei Variablen teilen.Ich fand das am einfachsten. Erstellen Sie einen neuen Anbieter und verwenden Sie den
'*'
Platzhalter, um ihn an alle Ansichten anzuhängen. Funktioniert auch in 5.3 :-)quelle
Der beste Weg wäre, die Variable mit zu teilen
View::share('var', $value);
Probleme beim Komponieren mit
"*"
:Betrachten Sie folgenden Ansatz:
Aus einer beispielhaften Blade-Ansicht:
Was geschieht?
GlobalComposer
Klasse wird 1000- mal mit instanziiertApp::make
.composing:some_partial_view_to_display_i
wird 1000 Mal behandelt.compose
Funktion innerhalb derGlobalComposer
Klasse wird 1000 Mal aufgerufen.Die Teilansicht
some_partial_view_to_display_i
hat jedoch nichts mit den Variablen zu tun, die aus der Renderzeit bestehen,GlobalComposer
sondern erhöht diese stark.Bester Ansatz?
Verwendung
View::share
entlang einer gruppierten Middleware.Aktualisieren
Wenn Sie etwas verwenden, das über die Middleware-Pipeline berechnet wird, können Sie einfach das richtige Ereignis abhören oder die View-Share-Middleware am letzten Ende der Pipeline platzieren.
quelle
In der Dokumentation:
Ich bin mit Marwelln einverstanden, füge es einfach
AppServiceProvider
in die Boot-Funktion ein:Ich empfehle, einen bestimmten Namen für die Variable zu verwenden, um Verwechslungen oder Fehler mit anderen nicht 'globalen' Variablen zu vermeiden.
quelle
Die Dokumentation ist unter https://laravel.com/docs/5.4/views#view-composers zu hören, aber ich werde sie aufschlüsseln
Suchen Sie im Stammverzeichnis Ihrer Anwendung nach dem Verzeichnis app \ Providers, erstellen Sie die Datei ComposerServiceProvider.php, kopieren Sie den folgenden Text, fügen Sie ihn ein und speichern Sie ihn.
Öffnen Sie im Stammverzeichnis Ihrer Anwendung Config / app.php und suchen Sie in der Datei nach dem Abschnitt Providers. Kopieren Sie diesen 'App \ Providers \ ComposerServiceProvider' und fügen Sie ihn in das Array ein.
Auf diese Weise haben wir den Composer Service Provider erstellt. Wenn Sie Ihre Anwendung mit dem Ansichtsprofil wie http: // IhreDomäne / etwas / Profil ausführen , wird der Dienstanbieter ComposerServiceProvider aufgerufen und die Klasse App \ Http \ ViewComposers \ ProfileComposer wird instanziiert, indem die Methode Composer aufgrund des folgenden Codes in der aufgerufen wird Boot-Methode oder -Funktion.
Gehen Sie zum Verzeichnispfad app / Http
Erstellen Sie das Verzeichnis ViewComposers
Erstellen Sie die Datei ProfileComposer.php .
Gehen Sie nun zu Ihrer Ansicht oder in diesem Fall zu Profile.blade.php und fügen Sie hinzu
und das zeigt die Anzahl der Benutzer auf der Profilseite.
Um die Anzahl auf allen Seiten anzuzeigen, ändern Sie sich
Zu
quelle
Ich denke, dass der beste Weg mit ist
View Composers
. Wenn jemand hierher gekommen ist und herausfinden möchte, wie dies mit View Composers möglich ist, lesen Sie meine Antwort => Wie kann ich eine Variable für alle Ansichten freigeben ?quelle
Die Dokumentation finden Sie hier https://laravel.com/docs/5.4/views#view-composers, aber ich werde sie aufschlüsseln. 1. Suchen Sie in Ihrem Stammverzeichnis nach den Verzeichnisanbietern und erstellen Sie die für ComposerServiceProvider.php mit Inhalt
quelle
In Ihrem Konfigurationsordner können Sie einen PHP-Dateinamen erstellen, zum Beispiel "variable.php" mit dem folgenden Inhalt:
Jetzt können Sie es in allen Ansichten wie verwenden
quelle
1) In (app \ Providers \ AppServiceProvider.php)
2) in Ihrem Benutzermodell
3) aus Ihrer Sicht
quelle
Laravel 5.6 Methode: https://laravel.com/docs/5.6/views#passing-data-to-views
Beispiel für die Freigabe einer Modellsammlung für alle Ansichten (AppServiceProvider.php):
quelle
Sie haben zwei Möglichkeiten:
1. Teilen Sie über die Boot-Funktion in App \ Providers \ AppServiceProvider
public function boot() { view()->share('key', 'value'); }
Und greifen Sie in jeder Ansichtsdatei auf die Variable $ key zu.
Hinweis: Beachten Sie, dass Sie hier nicht auf aktuelle Sitzungs-, Authentifizierungs- und Routendaten zugreifen können. Diese Option ist nur dann sinnvoll, wenn Sie statische Daten freigeben möchten. Angenommen, Sie möchten einige Daten basierend auf dem aktuellen Benutzer, der Route oder einer benutzerdefinierten Sitzungsvariablen freigeben, die Sie damit nicht ausführen können.
'aliases' => [ ..., 'Helper' => App\HelperClass\Helper::class, ],
und erstellen Sie Helper.php im HelperClass-Ordner im App-Ordner
und überall darauf zugreifen
Helper::Sample()
Sie sind hier nicht darauf beschränkt, Auth, Route, Session oder andere Klassen zu verwenden.
quelle