O que é o View Composer?
O View Composer é uma ferramenta poderosa do Laravel que permite compartilhar variáveis com uma ou mais views. 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. Em 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. Logo você poderá imaginar muitos usos para este recurso.
Existem formas diferentes de se contruir e a melhor delas dependerá de sua necessidade. 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. No exemplo abaixo, utilizaremos 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.