La Laravel, il lavoro di uscita variabile con Visualizza :: Condividi ma non con Visualizza :: Compositore
Domanda
Ho bisogno dello stesso menu in tutte le mie opinioni.
Quindi ottengo i dati di cui ho bisogno per l'output del menu in un costruttore definito nel mio basecontroller.
Per avere i dati che ho provato per la prima volta di utilizzare la vista :: Compositore ma non dunno perché non ottengo alcun errore, sembra view :: Composer non è stato eseguito affatto ...
Se utilizzo View :: Share, il suo lavoro
// basecontroller.php
//function called in the constructor
public function init()
{
$envs = $this->game->environments()->get();
View::share('test', $envs);
View::composer('layouts.base', function($view)
{
$view->with('envs', $envs);
});
}
.
// base.twig
//nothing output here, no error
{% for env in envs %}
{{ env.name }}
{% endfor %}
//its work
{% for env in test %}
{{ env.name }}
{% endfor %}
.
Sono nuovo a Laravel Quindi forse mi manca qualcosa?
Soluzione
Penso che il motivo per cui questo non funziona sia dovuto a dove si inserisce il compositore di visualizzazione nel tuo codice.Visualizza i compositori a Laravel sono essenzialmente callbackti che vengono eseguiti non appena la vista è resa.Dove è definita questa funzione init()
?La mia ipotesi è che la vista viene creata prima il tuo compositore di visualizzazione è definito - il che significa che la callback del compositore di visualizzazione non verrà mai eseguita.
Prova a spostare l'intero blocco composito di vista dalla funzione init()
e aggiungerlo alla parte inferiore del file di routine.php e vedere se funziona.Non è un brutto posto per posizionare i compositori di visualizzazione se non ne hai troppi, se hai potuto creare una nuova classe per memorizzarle e aggiungere quel percorso al tuo percorso di autoload.
Leggi di più A proposito di compositori di visualizzazione qui