Nos capítulos anteriores, definimos as rotas para o nosso recurso de produtos. Agora, iremos atualizar o controlador do produto para implementar as operações CRUD (Create, Read, Update, Delete). O controlador de recurso de produtos no Laravel, por padrão, inclui sete métodos:
-
index()
: Lista todos os produtos. -
create()
: Exibe um formulário para criar um novo produto. -
store()
: Armazena os dados do novo produto na base de dados. -
show()
: Exibe um único produto com detalhes. -
edit()
: Exibe o formulário de edição do produto. -
update()
: Atualiza os dados do produto na base de dados. -
destroy()
: Exclui o produto da base de dados.
Para garantir a validação dos dados ao armazenar e atualizar produtos, utilizaremos StoreProductRequest
e UpdateProductRequest
.
Método index()
O método index()
é responsável por listar todos os produtos.
public function index() : View
{
return view('produtos.index', [
'produtos' => Produto::latest()->paginate(5)
]);
}
Neste método, utilizamos o Eloquent para obter os produtos da base de dados ordenados pela data de criação e organizados por páginas, com 5 elementos. Utilizamos a vista produtos.index
para visualizar os produtos.
Método create()
O método create()
exibe o formulário para criar um novo produto.
public function create() : View
{
return view('produtos.create');
}
Este método simplesmente retorna a vista produtos.create
.
Método store()
O método store()
armazena os dados do novo produto na base de dados. Vamos validar os dados utilizando StoreProductRequest
.
public function store(StoreProdutoRequest $request) : RedirectResponse
{
Produto::create($request->validated());
return redirect()->route('produtos.index')
->withSuccess('Produto criado com sucesso!'.');
}
Aqui, utilizamos StoreProductRequest
para validar os dados da requisição. Em seguida, criamos um novo produto utilizando os dados validados e redirecionamos para a lista de produtos com uma mensagem de sucesso.
Mapeamento Automático de Modelos
No Laravel, quando se define o parâmetro de uma rota com um modelo como argumento, o framework usa um recurso chamado Route Model Binding (ou vinculação de modelo). Isso significa que o Laravel automaticamente faz a correspondência entre o ID que é enviado pela URL e o modelo correspondente na base de dados.
Método show()
O método show()
exibe um único produto.
public function show(Produto $produto) : View
{
return view('produtos.show', compact('produto'));
}
Este método encontra o produto pelo seu ID e retorna a vista produtos.show
com o produto.
Método edit()
O método edit()
exibe o formulário de edição para um produto específico.
public function edit(Produto $produto) : View
{
return view('produtos.edit', compact('produto'));
}
Este método encontra o produto pelo seu ID e retorna a vista produtos.edit
com o produto.
Método update()
O método update()
atualiza os dados do produto na base de dados. Vamos validar os dados utilizando UpdateProductRequest
.
public function update(UpdateProdutoRequest $request, Produto $produto) : RedirectResponse
{
$produto->update($request->validated());
return redirect()->route('produtos.index')
->withSuccess('Produto atualizado com sucesso!');
}
Aqui, utilizamos UpdateProductRequest
para validar os dados da requisição. Em seguida, atualizamos o produto encontrado com os dados validados e redirecionamos para a lista de produtos com uma mensagem de sucesso.
Método destroy()
O método destroy()
exclui um produto da base de dados.
public function destroy(Produto $produto) : RedirectResponse
{
$produto->delete();
return redirect()->route('produtos.index')
->withSuccess('Produto excluído com sucesso!');
}
Este método encontra o produto pelo seu ID, removendo-o e redireciona para a lista de produtos com uma mensagem de sucesso.
Resumo
Neste capítulo, atualizámos o nosso controlador de produtos para implementar todas as operações CRUD necessárias. Utilizámos métodos específicos para index
, create
, store
, show
, edit
, update
e destroy
, garantindo validação adequada com StoreProductRequest
e UpdateProductRequest
.