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.