9. Atualizar o código no controlador dos produtos

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.

<< 8. Atualizar o código do... Índice 10. Atualizar o código da... >>