2013-05-23 18 views
7

Ho una barra di navigazione come questa.Binding View :: compositore per abbinare tutte le visualizzazioni utilizzando i caratteri jolly?

<li>Account</li> 
    <ul> 
     <li>Register</li> 
     <li>Login/li> 
     ... 

Desidero aggiornare questo dinamicamente in base a Auth::check(). Ad esempio, se l'utente ha effettuato l'accesso, "Account" verrà modificato con "Pagina Profilo personale" ei fratelli figli verranno sostituiti con una matrice appropriata.

Ho bisogno di fare questo senza modificare View::make calls nei miei controller. Sembra piuttosto male.

Una soluzione come questa è quello che sto cercando;

View::composer('home.*', function($view) { 
    if(Auth::check()) 
     return $view->nest('accountArea', 'home.navigation-loggedIn', null); 
    else 
     return $view->nest('accountArea', 'home.navigation-visitor', null); 
}); 

Se ci sono alternative migliori, mi piacerebbe sentire anche loro!

+0

Che dire di legame del compositore vista al layout, invece? –

+0

Puoi elaborarlo un po '? – Aristona

+0

Bene, presumo che si stiano utilizzando i layout e che si desidera eseguire il nesting sul layout (non sulla vista del contenuto effettivo). Quindi dovresti fare qualcosa come 'View :: composer ('layouts.default', ...)'. –

risposta

8

Sembra che i caratteri jolly di Laravel funzionino. Al momento sono solo privi di documenti.

View::composer('admin.layouts.*', function($view) 
{ 
    if (Sentry::check()) $view->with('navigation', View::make('admin._partials.navigation')); 
    else     $view->with('navigation', null); 
}); 

Questo è quello che stavo cercando.

Aggiornamento: Ecco una soluzione alternativa

È inoltre possibile associarlo al layout, in modo che tutti i subviews che estendere tale disposizione potranno beneficiare di compositore.

View::composer('admin.layouts.main_layout', function($view) 
{ 
    if (Sentry::check()) $view->with('navigation', View::make('admin._partials.navigation')); 
    else     $view->with('navigation', null); 
}); 

si legherà ai compositori di ogni vista che fa @extend('admin.layouts.main_layout').

+0

Woo, vai wildcard! –

+0

La funzione view compositore non ha funzionato nel mio caso.Ho inviato una variabile a un layout. ma era disponibile solo nel layout e non nelle viste che lo estendevano. I userd 'Visualizza :: condividi (chiave, valore)' –

3

È possibile utilizzare View::share('variable', 'value') per condividere una variabile attraverso tutte le viste.

+0

Entra in routes.php Credo? – Aristona

+0

Dipende, mi piace creare un file 'composers.php' per mettere i miei compositori View in modo tale che di solito li metta lì. –

0

Come dice Aristona (grazie per il consiglio!): Sono ammessi i caratteri jolly. Osservando il codice, possiamo vedere come i compositori sono ascoltatori di eventi e in quella parte della documentazione viene indicato: Wildcard event listeners.

Aggiungendo un po 'di più, in definitiva, Str::is() viene utilizzato da Events\Dispatcher per rilevare i listener wildcar. Per esempio, qualcosa di simile:

str_is('namespace::*.view', 'namespace::folder.view') 

Insomma, sono d'accordo che non sarebbe male una piccola frase informativo :)