Como criar campo select no formulário com Laravel 10
Neste tutorial, será apresentado como criar um campo select no formulário com Laravel 10.
Primeiramente, será mostrado como preencher o campo select com Laravel.
Em seguida, será apresentado como salvar dados do campo select no banco de dados.
Por fim, será mostrado como criar o campo select no formulário de edição.
Download do código fonte desenvolvido na aula: Download
Curso de Laravel: Mais Detalhes do Curso
Playlist completa sobre Laravel: Acessar
Receber as aulas gratuitas do curso de Laravel: Acessar
Para começar, é utilizado como base o projeto da aula "Como criar relacionamentos entre tabelas com hasMany no Laravel 10".
Na controller 'app/Http/Controllers/ContaController.php', no método 'create', responsável por carregar a página com o formulário, são recuperadas as situações no banco de dados e enviadas para a view.
// Carregar o formulário cadastrar nova conta
public function create()
{
// Recuperar do banco de dados as situações
$situacoesContas = SituacaoConta::orderBy('nome', 'asc')->get();
// Carregar a VIEW
return view('contas.create', [
'situacoesContas' => $situacoesContas,
]);
}
Na view 'resources/views/contas/create.blade.php', foi criado um campo do tipo select preenchido com as situações recuperadas do banco de dados. Também foi utilizado o método 'old' para manter a opção selecionada em caso de cadastro incorreto, decorrente de algum erro no preenchimento de outro campo.
<div class="col-md-4 col-sm-12">
<label for="situacao_conta_id" class="form-label">Situação da Conta</label>
<select name="situacao_conta_id" id="situacao_conta_id" class="form-select">
<option value="">Selecione</option>
@forelse ($situacoesContas as $situacaoConta)
<option value="{{ $situacaoConta->id }}"
{{ old('situacao_conta_id') == $situacaoConta->id ? 'selected' : '' }}>
{{ $situacaoConta->nome }}</option>
@empty
<option value="">Nenhuma situação da conta encontrada</option>
@endforelse
</select>
</div>
Para validar o campo select com Laravel, no arquivo 'app/Http/Requests/ContaRequest.php', foi implementada a validação indicando que o campo 'situacao_conta_id' é obrigatório.
'situacao_conta_id' => 'required',
Também foi criada a mensagem personalizada de erro no request com Laravel.
'situacao_conta_id.required' => 'Campo situação da conta é obrigatório!',
Para salvar o valor do campo select no banco de dados, na controller 'app/Http/Controllers/ContaController.php', no método 'store', foi implementado que a coluna 'situacao_conta_id' no banco de dados receba o valor proveniente do campo 'situacao_conta_id' do formulário.
'situacao_conta_id' => $request->situacao_conta_id,
Para adicionar o campo select no formulário de edição no Laravel, na controller 'app/Http/Controllers/ContaController.php', no método 'edit', foram recuperadas as situações do banco de dados e enviadas para a view.
// Carregar o formulário editar a conta
public function edit(Conta $conta)
{
// Recuperar do banco de dados as situações
$situacoesContas = SituacaoConta::orderBy('nome', 'asc')->get();
// Carregar a VIEW
return view('contas.edit', [
'conta' => $conta,
'situacoesContas' => $situacoesContas,
]);
}
Na view 'resources/views/contas/edit.blade.php', foi criado um campo do tipo select preenchido com as situações recuperadas do banco de dados. Além disso, foi utilizado o atributo 'selected' para manter a situação selecionada de acordo com o que está cadastrado no banco de dados.
<div class="col-md-4 col-sm-12">
<label for="situacao_conta_id" class="form-label">Situação da Conta</label>
<select name="situacao_conta_id" id="situacao_conta_id" class="form-select">
<option value="">Selecione</option>
@forelse ($situacoesContas as $situacaoConta)
<option value="{{ $situacaoConta->id }}"
{{ old('situacao_conta_id', $conta->situacao_conta_id) == $situacaoConta->id ? 'selected' : '' }}>
{{ $situacaoConta->nome }}</option>
@empty
<option value="">Nenhuma situação da conta encontrada</option>
@endforelse
</select>
</div>
Para salvar o valor do campo select no banco de dados, na controller 'app/Http/Controllers/ContaController.php', no método 'update', foi implementado que a coluna 'situacao_conta_id' no banco de dados receba o valor proveniente do campo 'situacao_conta_id' do formulário.
'situacao_conta_id' => $request->situacao_conta_id,
Baixar o código-fonte completo do projeto.
Bom, era isso. Espero que o tutorial tenha sido útil!