2013-06-01 16 views
9

Da quello che ho capito:laravel 4 - comprensione View :: quota()

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

farà $ pippo disponibili in tutti i punti di vista.

Tuttavia, è corretto dire che View::share() può essere utilizzato solo nello __construct()?

Perché da fuori __construct() non riesco a farlo funzionare.

+0

puoi mettere la funzione su come hai usato 'View :: share()'? – Michelle

risposta

9

View::share deve essere disponibile in qualsiasi punto all'interno dell'applicazione. Un luogo comune in cui viene utilizzato è visibile ai compositori, ma dovrebbe essere utilizzabile all'interno di un percorso o ovunque ne abbiate bisogno.

+0

Quindi, se ho 'View :: share ('name', 'Steve');' all'interno del metodo di un controller, $ name sarà disponibile per tutte le altre viste? È solo questo? – user2094178

+0

Ok, all'inizio mi sono sbagliato. Ho inserito in routes.php e aveva già l'effetto che mi aspettavo. Stavo provando da un singolo metodo a un altro metodo da un altro controller. – user2094178

+2

solo per aggiungere qualcosa per le persone che cercano un buon modo per farlo ... inseriscilo nel metodo '' '__construct()' '' del tuo controller di base. ;) –

8

Sì, aggiungendo:

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

nel file routes.php farà $ pippo (con un valore di 'bar') disponibile in tutti i punti di vista. Ciò è particolarmente utile per qualcosa come le classi di navigazione "attive" di Twitter Bootstrap. Ad esempio, si potrebbe fare:

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

per assicurarsi che la variabile navactive si trova in tutte le viste (e quindi non gettare gli errori) e poi quando si stanno facendo viste (nel controller, per esempio), si potrebbe passare:

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

e quindi nella vista (preferibilmente alcuni template lama bootstrappy) è possibile effettuare le seguenti operazioni:

<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

Questo è abbastanza utile! Grazie – titleistfour

+0

Questo è un comodo utilizzo per questo. Tuttavia, è sempre possibile aggiungere un'istruzione if per verificare se '$ navactive'' isset() '. Poiché hai menzionato il contrassegno di navigazione, un'altra soluzione pratica potrebbe utilizzare un plug-in che ho creato per quello scopo che può essere trovato qui: https://github.com/kfirba/markNavigator – kfirba

0

in pratica se si desidera condividere le variabili attraverso tutti v Per prima cosa, potresti prima voler creare una rotta base (E.x .: internalController.php) come classe genitore, quindi estendere gli altri controller come figlio (E.x: childController.php).

E sì è molto probabile che impostare il view::share('foo', $bar) nel __constructor() del internalController.php, dal momento che pranza ogni volta che la classe viene inizializzato, in questo modo la classe padre servirà i valori delle variabili per le classi figlie.