Controllers no Laravel: guia para iniciantes

PHP

Controllers no Laravel são uma parte essencial de qualquer aplicação web em Laravel. Eles são responsáveis por controlar a lógica da aplicação e garantir que as solicitações do usuário sejam tratadas de forma organizada e modular. Neste artigo, vamos discutir como os controllers funcionam no Laravel e como você pode usá-los para criar aplicativos da web robustos e escaláveis.

O que é um controller?

Em termos simples, um controller é um arquivo PHP que controla o fluxo da aplicação. Ele recebe as solicitações do usuário, processa-as e retorna uma resposta. O controller é responsável por gerenciar a lógica do negócio e a interação com o modelo de dados.

No Laravel, os controllers são armazenados na pasta app/Http/Controllers. Cada controller é uma classe que estende a classe base do Laravel App\Http\Controllers\Controller. Essa classe base fornece alguns métodos comuns que podem ser usados ​​para processar solicitações e retornar respostas.

Criando controllers no Laravel

Para criar um novo controller no Laravel, basta executar o comando:

php artisan make:controller NomeDoController

Isso criará um novo arquivo NomeDoController.php na pasta app/Http/Controllers.

Certifique-se de que seu controller seja bem organizado e modular, dividindo sua lógica em métodos separados que realizam tarefas específicas. Além disso, é importante adotar as melhores práticas do Laravel, como usar a injeção de dependência em vez de instanciar objetos diretamente em seus métodos.

Por exemplo, se quisermos criar um controller chamado ProdutoController, podemos executar o comando:

php artisan make:controller ProdutoController.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ProdutoController extends Controller
{
    //
}

Este controller não faz nada ainda, mas podemos começar a adicionar métodos para lidar com as solicitações do usuário.

Métodos de um controller

Os controllers do Laravel podem ter vários métodos que são executados para lidar com solicitações específicas do usuário. Por exemplo, podemos ter um método para exibir uma lista de produtos, outro método para exibir um formulário de criação de produto e um terceiro método para processar a criação do produto, e nos métodos de criação e atualização sempre que possível de atenção a validação dos dados.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Produto;

class ProdutoController extends Controller
{
    public function index()
    {
        $produtos = Produto::all();
        return view('produtos.index', compact('produtos'));
    }

    public function create()
    {
        return view('produtos.create');
    }

    public function store(Request $request)
    {
        Produto::create($request->all()); //Sempre valide dados do usuario
        return redirect()->route('produtos.index');
    }
}

O método index retorna uma lista de produtos para a página produtos.index. O método create retorna uma página de formulário para criar um novo produto. O método store processa o formulário enviado pelo usuário e cria um novo produto no banco de dados.

Rotas para o controller

Para direcionar solicitações para um controller específico, podemos definir rotas em nosso arquivo routes/web.php. Por exemplo, podemos definir uma rota para o método index do ProdutoController da seguinte maneira:

Route::get('/produtos', [ProdutoController::class, 'index'])->name('produtos.index');

Isso direcionará as solicitações GET para /produtos para o método index do ProdutoController.

Outra maneira de simplificar o código do controller no Laravel é usando o resource routing. Com o resource routing, o Laravel pode gerar automaticamente as rotas CRUD (Create, Read, Update, Delete) para o seu controller. Tudo o que você precisa fazer é especificar o nome do controller e a rota do resource no arquivo de rotas.

Por exemplo, suponha que você tenha um model Post e deseja criar um controller para gerenciar as operações CRUD. Você pode usar o comando abaixo para gerar um controller com métodos para cada operação CRUD e com um modelo definido.

php artisan make:controller PostController --resource --model=Post

<?php

namespace App\Http\Controllers;

use App\Models\Post;
use Illuminate\Http\Request;

class PostController extends Controller
{
    public function index()
    {
        $posts = Post::all();
        return view('posts.index', compact('posts'));
    }

    public function create()
    {
        return view('posts.create');
    }

    public function store(Request $request)
    {
        $post = new Post;
        $post->title = $request->title;
        $post->body = $request->body;
        $post->save();

        return redirect()->route('posts.index');
    }

    public function show(Post $post)
    {
        return view('posts.show', compact('post'));
    }

    public function edit(Post $post)
    {
        return view('posts.edit', compact('post'));
    }

    public function update(Request $request, Post $post)
    {
        $post->title = $request->title;
        $post->body = $request->body;
        $post->save();

        return redirect()->route('posts.index');
    }

    public function destroy(Post $post)
    {
        $post->delete();

        return redirect()->route('posts.index');
    }
}

Observe que o parâmetro $post do método show, edit, update e destroy é um objeto da classe Post, que é passado automaticamente pelo Laravel com base no valor do parâmetro {post} da rota. Esse recurso é conhecido como route model binding.

No arquivo de rotas, você pode definir as rotas do resource usando a função resource:

Route::resource('posts', PostController::class);

O Laravel gerará automaticamente as rotas CRUD correspondentes:

Método HTTPURINome da rotaMétodo do controller
GET/postsposts.indexindex
GET/posts/createposts.createcreate
POST/postsposts.storestore
GET/posts/{post}posts.showshow
GET/posts/{post}/editposts.editedit
PUT/PATCH/posts/{post}posts.updateupdate
DELETE/posts/{post}posts.destroydestroy
Rotas em Laravel

Com o resource routing, você pode criar rotas CRUD rapidamente e facilmente. No entanto, lembre-se de que o resource routing pode não ser adequado para todos os casos, especialmente se você precisar de rotas personalizadas ou controllers para lidar com casos específicos.

Conclusão

Em resumo, os controllers do Laravel são uma parte fundamental de qualquer aplicação Laravel e são responsáveis por controlar a lógica de sua aplicação. Para tornar seus controllers mais organizados e modulares, é importante dividir sua lógica em métodos separados e adotar as melhores práticas do Laravel, como a injeção de dependência. Com essas práticas recomendadas em mente, você pode criar controllers que são fáceis de entender, manter e estender.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

0 Comments