2013-08-19 13 views
6

In relazione alla domanda Passing default variables to view, per passare variabili disponibili tra tutti i punti di vista, c'è una differenza tecnica o funzionale tra l'uso di View::composer():laravel: Differenza tra Mostra :: quota() e vista :: compositore()

View::composer('*', function($view) { 
    $thundercats = 'Woooooohh!!'; 
    $view->with('thundercats', $thundercats); 
}) 

nel file filters.php o l'uso di View::share() nel BaseController.php di file:

public function __construct { 
    $thundercats = 'Woooooohh!!'; 
    View::share('thundercats', $thundercats); 
} 

ho su Recentemente ho appreso su View::share() e lo trovo eccezionalmente intrigante sebbene abbia già iniziato a usare il primo in un altro progetto.

Edit:

La mia prima ipotesi è che il primo è un file (filters.php), mentre il il secondo è una classe (BaseController.php). Con questo in mente, immagino che una classe sia molto meglio? Anche se, non sono del tutto sicuro del perché a questo punto. :)

risposta

13

Tecnicamente non sono affatto uguali. View::share imposta semplicemente una variabile, mentre View::composer è una funzione di richiamata.

Mi spiego in modo più dettagliato:

View::share è davvero semplice imposta una variabile che può essere utilizzato all'interno di qualsiasi dei punti di vista, penso a come una variabile globale.

View::composer registra un evento che viene chiamato quando viene visualizzata la vista, non confonderlo con uno View::creator che viene generato quando viene creata un'istanza di una vista.

View::composer/View::creator possono essere entrambi utilizzati come classe che è well documented.

Mentre questi ti danno la possibilità di passare i dati aggiuntivi per una vista, ma anche dare alla possibilità di fare un sacco di altre cose, per esempio che potevano:

  • facilitare il debug una vista
  • informazioni Log sulle viste
  • essere utilizzato per creare la cache personalizzato (probabilmente non è una grande idea, ma possibile)

Questi sono solo alcuni esempi di quello che poteva possibile utilizzando View::composer e View::creator.

+0

Vedo. Quindi, per semplicità, se tutto quello che vuoi è di generare una variabile 'globale', allora è meglio usare 'View :: share()'. Per qualsiasi altro/più di questo, usa 'View :: composer()'. – enchance

+1

Per semplicità, certo, tuttavia se ti ritrovi a definirlo più e più volte probabilmente lo si astragga in un 'View :: compositore'. – tplaner

+0

Controlla anche questa risposta http://stackoverflow.com/a/23857517/682754. Entrambi mi hanno davvero aiutato a capire la differenza. – Carlton

0
View::composer('*', callback()); 

Significa che il callback verrà chiamato per tutte le visualizzazioni (*).

View::share 

Significa che una variabile verrà condivisa con tutte le viste visualizzate.

Poiché il primo è in filters.php, verrà applicato per tutti i percorsi.

Il secondo è in un contructor controller, quindi verrà applicato per tutte le visualizzazioni attivate da questo controller.

Un'ultima cosa: quando si esegue l'override un costruttore, è una buona pratice per Allways chiamare il costruttore genitore con questo codice:

parent::_construct(); 
+0

Vedo. quindi le variabili di 'Views :: composer' possono essere accessibili anche in _routes.php_ e in qualsiasi altro file? Per curiosità, si può fare per rendere disponibile una specifica variabile per tutti i ** controller ** diversi da '$ this-> varname'? – enchance

+0

Se View :: composer ('*', callback()) è un'opzione valida, dovrebbe essere nella documentazione. –

Problemi correlati