7. Definir rotas

Introdução

No Laravel, as rotas são essenciais para definir como os pedidos HTTP são processados pela aplicação. As rotas determinam quais controladores e métodos serão chamados quando um utilizador faz uma requisição a um URL específico. Vejamos como podemos definir rotas no Laravel de forma detalhada e prática.

1. O ficheiro de rotas

Laravel utiliza o ficheiro routes/web.php para definir as rotas das aplicações web. Este ficheiro é automaticamente carregado pelo framework.

// routes/web.php

use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return view('welcome');
});

Neste exemplo, estamos a definir uma rota que responde a requisições GET no URL raiz (/). Quando um utilizador visita este URL, a função anónima retorna a vista welcome.

2. Definir rotas básicas

Existem diferentes tipos de requisições HTTP que podemos mapear para rotas, tais como GET, POST, PUT, DELETE, entre outros. Vejamos alguns exemplos:

// Rotas GET
Route::get('/produtos', 'ProdutoController@index');

// Rota POST
Route::post('/produtos', 'ProdutoController@store');

// Rota PUT
Route::put('/produtos/{id}', 'ProdutoController@update');

// Rota DELETE
Route::delete('/produtos/{id}', 'ProdutoController@destroy');

Estas rotas mapeiam operações de CRUD (Create, Read, Update, Delete) para o controlador ProdutoController. Por exemplo, ProdutoController@index será chamado quando um utilizador visitar /produtos.

3. Parâmetros nas rotas

É possível definir parâmetros dinâmicos nas rotas, que passam valores diretamente para o controlador. Vamos ver um exemplo:

Route::get('/produtos/{id}', 'ProdutoController@show');

Aqui, o {id} é um parâmetro dinâmico que pode ser acedido dentro do método show do ProdutoController.

// ProdutoController.php

public function show($id)
{
    $produto = Produto::find($id);
    return view('produtos.show', compact('produto'));
}

4. Restrições de parâmetros

Podemos restringir os parâmetros utilizando expressões regulares. Por exemplo, se quisermos que o id seja sempre um número:

Route::get('/produtos/{id}', 'ProdutoController@show')->where('id', '[0-9]+');

5. Agrupar rotas

Para simplificar a gestão das rotas, Laravel permite agrupá-las. Vejamos como criar um grupo de rotas para os produtos:

Route::prefix('produtos')->group(function () {
    Route::get('/', 'ProdutoController@index');
    Route::post('/', 'ProdutoController@store');
    Route::get('/{id}', 'ProdutoController@show');
    Route::put('/{id}', 'ProdutoController@update');
    Route::delete('/{id}', 'ProdutoController@destroy');
});

O prefixo 'produtos' será automaticamente adicionado às rotas dentro deste grupo.

6. Rotas nomeadas (named routes)

Rotas nomeadas facilitam a geração de URLs e redirecionamentos dentro da aplicação:

Route::get('/produtos/{id}', 'ProdutoController@show')->name('produtos.show');

Podemos então usar este nome ao criar links ou ao redirecionar:

// Gerar uma URL
$url = route('produtos.show', ['id' => 1]);

// Redirecionar
return redirect()->route('produtos.show', ['id' => 1]);

7. Definir Rotas de Recursos (resource routes)

No Laravel, rotas de recursos são uma forma conveniente de definir todas as rotas necessárias para realizar operações CRUD (Criar, Ler, Atualizar e Apagar) num determinado recurso, como produtos, utilizadores, ou artigos. O Laravel fornece um comando específico que cria automaticamente essas rotas essenciais de forma padronizada e eficiente.

O que são Rotas de Recursos?

Uma rota de recurso mapeia as ações de um Controller a URLs específicas para um determinado recurso. Por exemplo, para um produto, as rotas de recursos permitem criar endpoints que lidam com todas as operações necessárias para a gestão desse produto: apresentar, mostrar, criar, editar, atualizar e apagar. Estas rotas são definidas de maneira simplificada utilizando o método Route::resource(), que cria automaticamente várias rotas pré-configuradas, associadas ao Controller que gere esse recurso.

Passo 1: Definir as Rotas de Recursos no web.php

Para definir as rotas de recursos do Produto no Laravel, tudo o que se precisa de fazer é adicionar a seguinte linha ao ao ficheiro routes/web.php:

Route::resource('produtos', ProdutoController::class);

Explicação do Código:

  • Route::resource('produtos', ProdutoController::class);: * produtos : Define o nome do recurso que estamos a gerir. Neste caso, estamos a definir rotas para um recurso chamado produtos. * ProdutoController::class: Define o controlador que vai tratar as diferentes ações para este recurso. O Laravel espera que este controlador siga a convenção de nomes e métodos como index, show, create, store, edit, update, e destroy.

Rotas Geradas Automaticamente Quando usa Route::resource(), o Laravel cria automaticamente as seguintes rotas para o controlador de produtos:

| Método HTTP | Caminho              | Ação                                   | Método do Controller   |
|-------------|----------------------|----------------------------------------|------------------------|
| GET         | /produtos             | Mostrar todos os produtos               | `index()`              |
| GET         | /produtos/create      | Exibir o formulário de criação de um produto | `create()`         |
| POST        | /produtos             | Guardar um novo produto                | `store()`              |
| GET         | /produtos/{produto}   | Mostrar um produto específico           | `show()`               |
| GET         | /produtos/{produto}/edit | Exibir o formulário de edição de um produto | `edit()`            |
| PUT/PATCH   | /produtos/{produto}   | Atualizar um produto                   | `update()`             |
| DELETE      | /produtos/{produto}   | Apagar um produto                      | `destroy()`            |

Vantagens de Usar Rotas de Recursos:

  • Padronização: Todas as rotas seguem um padrão claro, facilitando a manutenção e a escalabilidade do código.
  • Eficiência: Em vez de definir manualmente cada rota individualmente, com Route::resource() poupamos tempo e reduzimos a repetição de código.
  • Clareza: O Laravel adota uma convenção comum para operações CRUD, tornando o código mais fácil de ler e entender.

Exemplo Completo no routes/web.php:

Aqui está um exemplo de como o arquivo routes/web.php pode ficar após adicionar a rota de recursos para o modelo de Produto:

	use Illuminate\Support\Facades\Route;
	use App\Http\Controllers\ProdutoController;

	Route::get('/', function () {
			return view('welcome');
	});

	// Definir as rotas de recursos para produtos
	Route::resource('produtos', ProdutoController::class);

Neste exemplo, adicionamos a definição da rota de recurso produtos associada ao ProdutoController. Com esta linha, o Laravel cria automaticamente todas as rotas necessárias para realizar as operações CRUD do recurso produto.

Resumo

Definir rotas no Laravel é um processo fundamental que liga URLs a controladores e métodos específicos. Aprendemos a definir rotas básicas, rotas com parâmetros, aplicar restrições de parâmetros, agrupar rotas e criar rotas nomeadas. Estas práticas organizam e simplificam o código, tornando a aplicação mais flexível e fácil de manter.

<< 6. Migrar tabelas Índice 8. Atualizar o código do... >>