SimpleRouter
Sistema de rotas dinâmicas.
Criar o arquivo .htaccess
O arquivo .htaccess deve ser criado na pasta raiz.
RewriteEngine On
Options All -Indexes
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?route=/$1 [L,QSA]
Namespace
O método namespace() é associado ao padrão MVC e define em que local a rota buscará pelo controlador.
Exemplo:
$route->namespace('App/Controllers');
Group
o método group() define a rota PAI e tudo que vier após a definição será considerada uma rota FILHA.
Exemplo:
<?php
require_once __DIR__ . '/vendor/autoload.php';
$route = new \SimpleRouter\Application\Router();
$route->namespace('App/Controllers');
$route->group('/users');
$route->get('/all', 'Controller@method');
$route->get('/{id}/profile', 'Controller@method');
$route->dispatch();
var_dump($route);
Output:
SimpleRouter\Application\Router: (object) [Object ID #3][2 properties]
routes: (array) [1 element]
GET: (array) [2 elements]
/users/all: (string) "Controller@method"
/users/{id}/profile: (string) "Controller@method"
Rotas
Declaração
Rotas estáticas
Basicamente é uma rota que não receberá parâmetros.
<?php
# Autoload.
require_once __DIR__ . '/vendor/autoload.php';
# Instância.
$route = new \SimpleRouter\Application\Router();
# Definição do namespace onde serão buscadas as classes.
$route->namespace('App/Controllers');
# Declarando um grupo de rotas, o exemplo abaixo é mesmo que declarar null.
$route->group();
# Rota com verbo GET, os verbos suportados são: GET, POST, PUT, PATCH e DELETE.
$route->get('/', 'Controller@method');
# Executando as rotas.
$route->dispatch();
Rotas dinâmicas
Ao contrário da anterior, está rora receberá parâmetros que podem ser recuperados posteriormente.
<?php
# Autoload.
require_once __DIR__ . '/vendor/autoload.php';
# Instância.
$route = new \SimpleRouter\Application\Router();
# Definição do namespace onde serão buscadas as classes.
$route->namespace('App/Controllers');
# Declarando um grupo de rotas, o exemplo abaixo é mesmo que declarar null.
$route->group();
# Rota dinâmica.
# Os dados podem ser recuperados através do método getParameters().
$route->get('/{name}/{age}', 'Controller@method');
# Executando as rotas.
$route->dispatch();
Rotas com callback
É possível (E muito simples) definir uma função de retorno para o VERBO HTTP que você desejar!
<?php
# Autoload.
require_once __DIR__ . '/vendor/autoload.php';
# Instância.
$route = new \SimpleRouter\Application\Router();
# Definição do namespace onde serão buscadas as classes.
$route->namespace('App/Controllers');
# Declarando um grupo de rotas, o exemplo abaixo é mesmo que declarar null.
$route->group();
# Rota com callback.
$route->get('/{name}/{age}', function($data) {
echo "<p>His name is <strong>{$data->name}</strong> and his age is <strong>{$data->age}</strong> years.</p>";
});
# Executando as rotas.
$route->dispatch();
Redirecionamento
<?php
# Autoload.
require_once __DIR__ . '/vendor/autoload.php';
# Instância.
$route = new \SimpleRouter\Application\Router();
# Definição do namespace onde serão buscadas as classes.
$route->namespace('App/Controllers');
# Declarando um grupo de rotas, o exemplo abaixo é mesmo que declarar null.
$route->group();
# Redirecionando a rota para '/redirect-page'.
$route->redirect('/redirect-page');
# Executando as rotas.
$route->dispatch();
Tratando erros nas rotas
O tratamento dos erros pode ser muito útil na criação de uma classe ou função que se responsabilizará por direcionar o usuário em caso de erro na rota.
<?php
# Autoload.
require_once __DIR__ . '/vendor/autoload.php';
# Instância.
$route = new \SimpleRouter\Application\Router();
# Definição do namespace onde serão buscadas as classes.
$route->namespace('App/Controllers');
# Declarando um grupo de rotas, o exemplo abaixo é mesmo que declarar null.
$route->group();
# Rota estática.
$route->get('/', 'Controller@method');
# Definindo um novo grupo de rotas
$route->group('/erro');
$route->get('/{errcode}', 'Error@index');
# Executando as rotas.
$route->dispatch();
# Tratamento de erro
if (!is_null($route->error())) {
$route->redirect("/erro/{$route->error()}");
}
Códigos de erro
-
400
- Bad Request.
- Indica que o servidor não pode ou não irá processar a requisição devido a alguma coisa que foi entendida como um erro do cliente (por exemplo, sintaxe de requisição mal formada, enquadramento de mensagem de requisição inválida ou requisição de roteamento enganosa).
- Bad Request.
-
404
- Not Found.
- Indica que o servidor não conseguiu encontrar o recurso solicitado. Normalmente, links que levam para uma página 404 estão quebrados ou desativados, e podem estar sujeitos a link rot.
- Not Found.
-
405
- Method Not Allowed.
- Indica que o verbo HTTP utilizado não é suportado, por exemplo: a requisição ocorre por meio de um GET, porém o único método disponível é o POST.
- Method Not Allowed.
-
501
- Not Implemented.
- Indica que o servidor não suporta a funcionalidade requerida para completar a requisição.
- Not Implemented.