Uma situação comum ao construir sites é quando você deseja ter um elemento disponível em todas as páginas. Se esse elemento for estático ao invés de dinâmico, não há problema no Laravel – nós simplesmente criamos um layout e parciais do usuário e tal. O que tende a confundir as pessoas é quando o conteúdo é dinâmico. Por exemplo, sua navegação. Se você estiver construindo um site onde a navegação pode ser alterada com frequência, você pode muito bem armazená-lo no banco de dados com um modelo (como estou neste exemplo). Felizmente, podemos compartilhar uma variável em todas as visualizações com bastante facilidade:
class Base_Controller extends Controller {
public function __construct()
{
// Build our navigation
$navlinks = Cache::get('navlinks', function()
{
$navlinks = NavLink::with(array('childLinks' => function($query)
{
$query->order_by('position', 'asc');
}))->where('navlink_id', '=', '-1')->order_by('position', 'asc')->get();
Cache::forever('navlinks', $navlinks);
return $navlinks;
});
View::share('navLinks', $navlinks);
...
}
}
Acima, estamos criando a variável $ navlinks que extraímos do cache (ou se ela não existir, extraímos do banco de dados e depois do cache). A mágica acontece aqui:
View::share('navLinks', $navlinks);
Graças a esta linha, podemos acessar nossa variável de navegação em qualquer visualização que desejarmos por meio da variável $ navLinks.