Repository navigation
Releases: kevind3v/brway
Releases · kevind3v/brway
Release list
BrWay CC v1.1.0
Grupos com função
group() aceita uma função com as rotas do grupo. Dentro dela, $this é o router. No fim, o grupo volta ao que era, sem precisar de group(null).
$router->group("admin", function () {
$this->get("/", "Admin:home"); // /admin
$this->get("/user/{id}", "Admin:user"); // /admin/user/{id}
$this->group("report", function () {
$this->get("/{year}", "Report:year"); // /admin/report/{year}
}, Admin::class);
}, Auth::class);
$router->get("/contato", "Web:contact"); // fora do grupo- Middlewares do grupo vão no 3º parâmetro.
- Grupo dentro de grupo soma o caminho e os middlewares: primeiro os do grupo de fora, depois os do de dentro e por último os da rota.
- O namespace alterado dentro da função vale só ali dentro.
- Também funciona com o router no parâmetro:
function (Router $router) { ... }. - Um grupo com função fecha o grupo aberto sem função antes dele.
O formato antigo ($router->group("admin", Auth::class) seguido das rotas) continua funcionando como antes.
BrWay CC v1.0.0
Primeira versão da BrWay, um roteador para PHP 8.2+ simples e sem dependências: verbos RESTful, grupos, rotas nomeadas, middlewares e form spoofing, para aplicações MVC e APIs.
É a continuação do CoffeeCode Router, de Robson V. Leite, atualizado para o PHP 8.x, com correções de bugs, reforço de segurança e novos recursos.
Instalação
composer require brbunny/brwayExemplo
use BrWay\Router;
$router = new Router("https://www.seudominio.com");
$router->namespace("App\Controllers");
$router->get("/", "Web:home");
$router->get("/user/{id}", "User:show", "user.show");
$router->put("/user/{id}", [User::class, "update"]);
$router->group("admin", Auth::class);
$router->get("/", "Admin:home");
$router->dispatch();
if ($router->error()) {
$router->redirect("/error/{$router->error()}");
}Segurança
- O middleware do grupo roda junto com o da rota. Antes, uma rota com middleware próprio perdia o do grupo (ex.: o
Authde um grupoadmin). ?route=,/index.php?route=e/index.php/xnão trocam mais a rota aberta, então bloqueios feitos no servidor não podem ser contornados.- Um campo do corpo da requisição não sobrescreve um parâmetro da URL (
{id}). - Parâmetros da rota recusam caracteres de controle (
%00,%0A). route()codifica os valores nas URLs geradas.- Um handler em string nunca é executado como função (
"phpinfo:x"). - O corpo de PUT/PATCH/DELETE é limitado ao
post_max_size.
Correções
- Funciona com a config padrão do Nginx (
try_files $uri /index.php?$query_string), o problema da issue robsonvleite#61. - Espaço,
&,#e+no endereço chegam corretos à rota. - Os parâmetros da rota saem certos dentro de grupos.
- A rota mais específica vence (
/user/newantes de/user/{id}), em qualquer ordem de registro. - O caminho da rota é comparado literalmente (
.é um ponto). - Códigos de erro corretos: 404 (sem rota), 405 (caminho existe em outro verbo), 501 (controller, método ou middleware inexistente).
- Sem deprecations no PHP 8.4 e 8.5.
Novos recursos
- HEAD usa as rotas GET.
- Corpo em JSON (
application/json) no POST, PUT, PATCH e DELETE. - Handler no formato
[Controller::class, "metodo"].
Migrando do CoffeeCode Router
Troque use CoffeeCode\Router\Router; por use BrWay\Router;. Algumas mudanças de comportamento exigem atenção: veja Migrando do CoffeeCode Router no README.