Routing

O roteador da aplicação Hello permite o cadastro de rotas que respondem a qualquer verbo HTTP.

Hello disponibiliza 5 verbos de rotas para a sua aplicação: GET, POST, PUT, DELETE e PATCH.

Por padrão, o Hello contém um "ServiceProvider" chamado "CSRF" registrado, que permite a execução apenas de rotas com verbos diferentes de "GET" caso exista um token CSRF válido. As rotas com prefixo "api" serão executadas sem avaliação do token CSRF. Para fornecer o token em um formulário, utilize o helper "csrf_token" para retornar o valor do token válido. Esse token deve ser informado em um campo oculto do formulário (hidden) com o nome "_token". Se você não estiver utilizando um formulário, é possível realizar a requisição da rota protegida por CSRF através de um header com o nome "X-CSRF-TOKEN", usando a mesma lógica do campo oculto.

Lembre-se de que você também pode desativar o "ServiceProvider CSRF", mas isso não é recomendado para uma aplicação em produção. Para rotas de API, recomendamos o uso de JWT por meio de middlewares ou Service Providers.

Rotas básicas

app/Routes/web.php
<?php

use Kernel\Router\Route;

//Cria uma rota "hello" com o verbo GET
 Route::get('hello',function(){ return 'GET - Hello World!'; });
 
 //Cria uma rota "hello" com o verbo POST
 Route::post('hello',function(){ return 'POST'; });
 
 //Cria uma rota "hello" com o verbo PUT
 Route::put('hello',function(){ return 'PUT'; });
 
 //Cria uma rota "hello" com o verbo DELETE
 Route::delete('hello',function(){ return 'DELETE'; });
 
 //Cria uma rota "hello" com o verbo PATCH
 Route::patch('hello',function(){ return 'PATCH'; });

Às vezes, pode ser necessário registrar uma rota que responda a vários verbos HTTP. Você pode fazer isso usando o métodomatch.Ou ainda, você pode registrar uma rota que responda a todos os verbos HTTP usando o métodoany:

Às vezes, pode ser necessário personalizar a resposta de "página não encontrada" nos erros 404 para rotas que não foram definidas. Para isso, basta usar o asterisco(*) na declaração do seu roteamento:

E para a página inicial, ou seja, a index do seu aplicativo, basta usar a barra (/) na declaração do seu roteamento:

Rotas com parâmetros

Você pode utilizar a seguinte sintaxe para capturar os parâmetros de rotas "products/{id}". Use o helper "path" para retornar o valor do parâmetro de rota.

Além do helper "path", é possível recuperar o valor de um parâmetro de rota diretamente utilizando a seguinte sintaxe:

Também é possível injetar dependências na sua rota. É possível injetar quantas dependências forem necessários, para isso basta informar na frente da variável o namespace ou o nome da classe, conforme o exemplo abaixo:

Rotas com filtros nos parâmetros

Se você desejar que o parâmetro "id" do exemplo anterior seja sempre um valor contendo um número inteiro, você poderá usar o método encadeado "where" que recebe um array associativo onde as chaves são os nomes dos parâmetros da rota e os valores são as expressões regulares.

Rotas com middlewares

É possível definir um filtro para uma rota utilizando um middleware. Os middlewares são responsáveis por executar determinadas ações antes ou depois da execução da rota.

Rotas nomeadas

Também é possível definir um nome ou apelido/alias para a sua rota e acessar a sua rota pelo apelido ou nome fornecido por meio do helper "route". Também é possível passar um segundo parâmetro opcional no helper "route" contendo um array associativo com os valores do parâmetro de rota.

O helper "route" serve apenas para rotas nomeadas com apelidos/alias, enquanto o helper "url" trará o caminho completo da rota que foi definido no arquivo de roteamento "web.php" ou outro arquivo.

Grupo de rotas

É possível definir um grupo de rotas com middleware e prefixo que serão compartilhados no grupo ao invés de definir rota por rota.

Métodos controladores

É possível chamar um método controlador de uma classe controladora usando a seguinte sintaxe de rota. É obrigatoriamente importante que os métodos chamados estejam com o encapsulamento publico.

Você pode usar uma sintaxe alternativa para o código acima:

Também é possível usar o operador “@” seguido do nome da pasta do módulo de onde você deseja chamar o método da classe controladora.

Sintaxe alternativa para chamar um método controlador de uma classe controladora de um módulo.

Controlador de recursos

Você pode usar o método “resources” de rota única para cria várias rotas para lidar com uma variedade de ações no recurso. O controlador gerado já terá métodos para cada uma dessas ações.

Sintaxe alternativa:

Ações tratadas e criadas pelo controlador de recursos

Verbo
URI/Rota
Ação/Método
Nome da rota

GET

/products

index

products.index

GET

/products/create

create

products.create

POST

/products

store

products.store

GET

/products/{id}

show

products.show

GET

/products/{id}/edit

edit

products.edit

PUT

/products/{id}

update

products.update

DELETE

/products/{id}

destroy

products.destroy

Dica: você pode listar todas as suas rotas definidas na sua aplicação usando o comando de CLI: php hello route:list

Recursos únicos(singleton)

Você pode usar o recurso singleton para registrará as seguintes rotas. Como você pode ver, as rotas de "criação" não são registradas para recursos singleton e as rotas registradas não aceitam um identificador, pois pode existir apenas uma instância do recurso:

Ações tratadas e criadas pelo controlador de recursos únicos(singleton)

Verbo
URI/Rota
Ação/Método
Nome da rota

GET

/products

show

products.show

GET

/products/edit

edit

products.edit

PUT

/products

update

products.update

Controles de recursos diversos(controllers)

É possível definir de uma só vez uma lista de rotas e métodos fornecendo apenas uma classe controladora. A definição é feita por meio de um array associativo, onde as chaves do array são as rotas e os valores do array são os nomes dos métodos controladores. Por padrão ao definir uma rota, ela será criada com o verbo “GET”. Para criar com outro verbo, basta escrever no início do nome o verbo separado por “:”. Por exemplo: “post:teste”.

Atenção: Esse recurso não aceita a sintaxe alternativa.

Last updated