Pergunta

Preciso do mesmo menu em todas as minhas visualizações.

Assim, obtenho os dados necessários para gerar o menu em um construtor definido em meu BaseController.

Para obter os dados, primeiro tentei usar o View::composer, mas não sei por que não recebo nenhum erro, parece que o View::composer não foi executado ...

Se eu usar View::share, funciona

//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 %}

Sou novo no laravel, então talvez esteja faltando alguma coisa?

Foi útil?

Solução

Acho que o motivo pelo qual isso não está funcionando é onde você colocou o View Composer em seu código.View Composers no Laravel são essencialmente retornos de chamada que são executados assim que a visualização é renderizada.Onde é isso init() função definida?Meu palpite é que a visualização está sendo criada antes seu view compositor está definido - o que significa que o retorno de chamada do view compositor nunca será executado.

Tente mover todo o bloco do compositor de visualização do init() função e anexe-a ao final do seu arquivo Routes.php e veja se funciona.Esse não é um lugar ruim para colocar seus compositores de visualização se você não tiver muitos; se tiver, você pode criar uma nova classe para armazená-los e adicionar esse caminho ao seu caminho de carregamento automático.

Leia mais sobre compositores de visualização aqui

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top