Laravel View Composer-Variablen, die in Sichten, die das Layout erweitern, nicht verfügbar sind

8

Ich benutze einen Laravel View Composer, um ein paar Variablen mit allen Ansichten zu teilen.

app/composers.php :

%Vor%

Ich verstehe hier, dass alles, was layouts.base benutzt, die Daten des View Composers bekommt.

BaseComposer@compose , vereinfacht:

%Vor%

Gegeben ist layouts.base :

%Vor%

$global->name wird gefunden und das ist auch in der inkludierten layouts.partials.header :

%Vor%

Aber eine Ansicht, die layouts.base erweitert, löst einen Undefined variable: global Fehler aus:

home.blade.php

%Vor%

Alles funktioniert gut, wenn ich composers.php auf home ändern:

%Vor%

Ich würde gerne verstehen, warum, wenn home erweitert layouts.base die View-Composer-Variablen ohne diesen zusätzlichen Schritt nicht sehen kann.

    
Jkleg 08.10.2014, 20:24
quelle

1 Antwort

7

Das Problem ist hier die Reihenfolge, in der die Dinge passieren. Zeigen Sie Komponisten an, die aufgerufen werden, bevor die übereinstimmende Ansicht gerendert wird. Das bedeutet in Ihrem Fall:

  1. view home wird gerendert
  2. view composer für layouts.base wird aufgerufen
  3. view layouts.base wird gerendert

Dies führt dazu, dass die Variable global in der home -Ansicht nicht verfügbar ist.

Hier sind einige Lösungen, die helfen können

Ändern Sie das Composer-Muster

Ändern Sie das Übereinstimmungsmuster Ihres Composers so, dass alle Ansichten enthalten sind, die die Variable benötigen. Nutzen Sie den Platzhalter * wenn möglich.
Sie können sogar jede einzelne Ansicht anpassen:

%Vor%

Benutze keine Komponisten

Wenn Sie Ihre Daten in (fast) jeder Ansicht benötigen, können Sie View::share beim Start der Anwendung verwenden.

Fügen Sie dies in app/filters.php , app/start/global.php oder eine ähnliche Datei

ein %Vor%

Umdenken

Warum benötigen verschiedene Ansichten dieselben globalen Daten? Könnten Sie vielleicht den Teil der Ansicht, der die Daten benötigt, in eine Teilansicht verschieben, die Sie dann einfügen können?

    
lukasgeiter 21.12.2014, 22:18
quelle

Tags und Links