2016-05-22 2 views
0

Beim Rendern einer Ansicht von einem Controller ist es üblich, den Code in den Controller zu schreiben und dann die erforderlichen Variablen an die Ansicht zu übergeben, damit sie beim Rendern verwendet werden können.Wohin mit Code, der für das Layout in Laravel benötigt wird?

Diese Ansicht erweitert normalerweise eine Layoutansicht.

Wo gebe ich meinen Code ein, der in der Layoutansicht benötigt wird, und wie injiziere ich ihn?

Ich sah mir die Login/Register-Tasten aus dem offiziellen Laravel-Code als Beispiel an. Um sie richtig zu rendern, ist in der Ansicht die Information erforderlich, ob der Benutzer gerade angemeldet ist oder nicht.

In Laravel sieht dies wie folgt aus:

@if (Auth::guest()) 
    <li><a href="{{ url('/login') }}">Login</a></li> 
    <li><a href="{{ url('/register') }}">Register</a></li> 
@else 
    ... 

So die Ansicht tatsächlich die Daten über seine eigenen zu bekommen. Auch wenn der Code in einer Funktion enthalten ist, widerspricht dies meinem Verständnis der Codetrennung. Nach meinem Verständnis sollten die notwendigen Daten an die View weitergegeben werden und nicht auf externe Methoden zurückgreifen. Was passiert, wenn sich der Methodenname ändert usw.

Gibt es einen besseren Weg, dies in Laravel zu tun?

Zum Beispiel gibt es in Zend/Magento das Konzept eines "Blocks". Wo gibt es eine Klasse mit einem Code, der einer Ansicht entspricht und zur Bereitstellung von Daten verwendet werden kann?

Wäre es sinnvoll, dies in Middleware oder einen Service Provider zu legen?

+1

Um ehrlich zu sein, ich denke, das ist absolut in Ordnung, aber wenn Sie es in einer Variablen enthalten möchten, möchten Sie es in einem Ansichts-Composer platzieren, in dem Sie überprüfen, ob der aktuelle Benutzer ein Gast ist, und dann freigeben Dieser View-Composer mit allen Views, für die die Logik gilt. Hier ist die Dokumentation für L5.2: https://laravel.com/docs/5.2/views#view-composers (Bearbeiten: Bitte beachten Sie, dass sich die Art und Weise, in der die Ansichts-Komponisten geteilt werden, in der Vergangenheit leicht geändert hat. Sehen Sie sich die Dokumentation an für die Version, die Sie verwenden.) –

+0

das ist genau das, was ich suchte @ JoelHinz Wenn Sie that zu einer Antwort bewegen, markieren Sie es als akzeptiert. –

+0

Froh, dass es geholfen hat! Danke, dass ich es als Antwort hinzufügen darf, ich habe es jetzt getan. –

Antwort

1

Um ehrlich zu sein, ich denke, das ist absolut in Ordnung, aber wenn Sie es innerhalb einer Variablen enthalten möchten, möchten Sie es in einem Ansichts-Composer platzieren, in dem Sie überprüfen, ob der aktuelle Benutzer ein Gast ist und dann Teilen Sie diesen Ansichts-Composer mit allen Ansichten, für die die Logik gilt.

Hier Dokumentation für L5.2: http://laravel.com/docs/5.2/views#view-composers

Bitte beachten Sie, dass, wie Ansicht Komponisten geteilt werden leicht in der Vergangenheit verändert hat, so stellen Sie sicher, dass man sich die Dokumentation für die Version Sie verwenden.

Verwandte Themen