2013-06-01 8 views
9

Aus dem, was ich verstehe:Laravel 4 - Verständnis Ansicht :: Aktie()

View::share('foo','bar'); 

Wird $ foo in allen Ansichten machen.

Allerdings ist es richtig zu sagen View::share() kann nur in der __construct() verwendet werden?

Da von außen __construct() kann ich es nicht schaffen zu arbeiten.

+0

Kannst du die Funktion darauf anwenden, wie du 'View :: share()' benutzt hast? – Michelle

Antwort

9

View::share sollte überall innerhalb Ihrer Anwendung verfügbar sein. Ein gebräuchlicher Ort, an dem es verwendet wird, ist in Sicht Komponisten, aber es sollte innerhalb einer Route oder wo immer Sie es brauchen.

+0

Also, wenn ich 'View :: share ('name', 'Steve');' innerhalb einer Controller-Methode, $ name wird für alle anderen Ansichten verfügbar sein? Es ist nur so dass? – user2094178

+0

Ok, ich habe es anfangs falsch verstanden. Ich habe in routes.php platziert und es hatte bereits die Wirkung, die ich erwartet hatte. Ich habe versucht, von einer einzigen Methode zu einer anderen Methode von einem anderen Controller. – user2094178

+2

nur etwas für Leute hinzuzufügen, die nach einem guten Weg suchen, dies zu tun ... platziere es innerhalb der '' __construct() '' 'Methode deines Basiscontrollers. ;) –

8

Ja, und fügte hinzu:

View::share('foo','bar'); 

in Ihrer routes.php Datei $ foo (mit einem Wert von 'bar') in allen Ansichten machen. Dies ist besonders nützlich für so etwas wie die "aktiven" Navigationsklassen von Twitter Bootstrap. Zum Beispiel könnten Sie tun:

View::share('navactive', ''); 

um sicherzustellen, dass der navactive Variable wird in allen Ansichten gesetzt (und damit keine Fehler werfen) und dann, wenn Sie machen Ansichten (in Ihrem Controller, zum Beispiel), Sie könnte passieren:

return View::make('one')->with('navactive', 'one'); 

und dann in der Ansicht (vorzugsweise einige Vorlage bootstrappy Klinge) Sie folgendes tun:

<ul class="nav"> 
    @if (Auth::user()) 
    <li @if ($navactive === 'one') class="active" @endif><a href="{{{ URL::to('one/') }}}">One</a></li> 
    <li @if ($navactive === 'three') class="active" @endif><a href="{{{ URL::to('three/') }}}">Three</a></li> 
    <li @if ($navactive === 'five') class="active" @endif><a href="{{{ URL::to('five/') }}}">Five</a></li> 
    @endif 
</ul> 
+0

Das ist ziemlich praktisch! Danke – titleistfour

+0

Das ist eine praktische Nutzung dafür. Sie können jedoch immer eine if-Anweisung hinzufügen, um zu überprüfen, ob '$ navactive'' isset() 'ist. Da Sie die Navigationsmarkierung erwähnt haben, wäre eine andere praktische Lösung ein Plugin, das ich für diesen Zweck erstellt habe und das Sie hier finden: https://github.com/kfirba/markNavigator – kfirba

0

Grundsätzlich, wenn Sie die Variablen durch alle v teilen möchten Möglicherweise möchten Sie zuerst eine Basisroute (E.x .: internalController.php) als Elternklasse erstellen und dann andere Controller als Kind daraus erweitern (E.x: childController.php).

Und ja Sie werden höchstwahrscheinlich die view::share('foo', $bar) im __constructor() des internalController.php gesetzt, da es Mittagessen, wenn die Klasse initialisiert wird, auf diese Weise die Elternklasse werden die Variablenwerte zu den untergeordneten Klassen dienen.