O que é o View Composer?
O View Composer é uma ferramenta poderosa do Laravel que permite compartilhar variáveis com uma ou mais views. Por isso, em situações em que há a necessidade de preencher selects com dados recorrentes, como uma lista de estados, o View Composer oferece uma forma eficiente de evitar repetição de código e melhorar a usabilidade.
Exemplos Práticos de Uso do View Composer
Imagine que você está desenvolvendo um sistema para cadastro de clientes e fornecedores e, para ambos os casos, o usuário precisa escolher um estado a partir de uma lista. Uma solução comum seria criar uma array com os estados e usar um foreach para preencher o select, mas à medida que o sistema cresce, essa abordagem se torna ineficiente.
Aqui é onde o View Composer entra em ação.
O View Composer é um recurso no Laravel que te permite compartilhar uma variável com uma ou mais Views. Assim, logo você pode imaginar muitos usos para este recurso.
Entretanto, existem formas diferentes de se contruir e a melhor delas dependerá de sua necessidade. Por isso, neste breve artigo, mostrarei a maneira mais simples.
Implementando o View Composer no Laravel
Para implementar o View Composer, você deve adicionar o código no método boot() de um service provider. Noter que no exemplo abaixo, utilizamos o AppServiceProvider para demonstrar como compartilhar variáveis com views específicas:
public function boot()
{
view()->composer('form.*', function ($view) {
$estados = [
'SP' => 'São Paulo',
'PN' => 'Paraná',
'AM' => 'Amazonas',
'GO' => 'Goiás',
'CE' => 'Ceará'
];
$view->with('estados', $estados);
});
}
Entendendo o Código
O método composer() recebe dois parâmetros:
- O primeiro parâmetro define as views que receberão a variável. Você pode usar
'form.*'para indicar todas as views no diretórioform, ou especificar views individuais. - O segundo parâmetro é uma closure onde você define a lógica e passa a variável para a view através do método
with().
Aplicando em um Formulário Blade
Com a variável de estados agora disponível em suas views, você pode utilizá-la facilmente para preencher selects, como mostrado no exemplo abaixo:
<select name="estado">
@foreach($estados as $sigla => $estado)
<option value="{{ $sigla }}">{{ $estado }}</option>
@endforeach
</select>
Da mesma forma, você pode aplicar o View Composer para preencher outras informações dinâmicas, como cidades:
public function boot()
{
view()->composer('clientes.*', function($view) {
$cidades = DB::table('cidades')->where('estado', 'sp')->pluck('nome', 'sigla');
$view->with('cidades', $cidades);
});
}
Alternativa: Usando View Share
Outro método mais simples de compartilhar variáveis é através do view share, que compartilha variáveis de forma global em todas as views. No entanto, não é recomendado para situações complexas, pois pode carregar dados desnecessários em views que não precisam da variável.
Exemplo de view()->share():
public function boot()
{
view()->share('estados', [
'SP' => 'São Paulo',
'PN' => 'Paraná',
'AM' => 'Amazonas',
'GO' => 'Goiás',
'CE' => 'Ceará'
]);
}
Conclusão
O View Composer oferece uma maneira eficiente de compartilhar variáveis com múltiplas views sem repetir código, economizando tempo e melhorando a organização da aplicação. Em breve, abordaremos formas mais complexas de usar o View Composer, como por meio de classes.
