bluiceoficial / bluroute
BluRoute é uma biblioteca de roteamento leve para PHP.
README
BluRoute é uma biblioteca de roteamento leve para PHP, desenvolvida para aplicações que utilizam arquitetura baseada em controllers, funções e middlewares.
Instalação
Via Composer
composer require bluiceoficial/bluroute
Manual
Copie o arquivo BluRoute.php para seu projeto e faça a inclusão via autoloader ou require.
Estrutura recomendada
app/
├── controllers/
│ ├── HomeController.php
│ └── Admin/
│ └── DashboardController.php
│
├── views/
│ └── errors/
│ └── 404.php
│
public/
│ └── index.php
Inicializando
use BluRoute\BluRoute; $route = new BluRoute( namespace: 'App', pathDefault: dirname(__DIR__) . '/app' );
O primeiro parâmetro é o namespace principal dos controllers.
O segundo é o caminho da pasta da aplicação.
Criando uma rota GET
$route->routeGET('/', function () { echo 'Olá mundo!'; });
Também pode utilizar um controller.
$route->routeGET('/', 'HomeController@index');
Criando uma rota POST
$route->routePOST('/login', 'AuthController@login');
Controllers
A rota:
$route->routeGET('/', 'HomeController@index');
Procura automaticamente por:
app/controllers/HomeController.php
Dentro do arquivo:
<?php namespace App\HomeController; function index() { echo "Página inicial"; }
O namespace sempre será:
Namespace principal
+
Nome do controller
Rotas Nomeadas
$route->routeGET('/', 'HomeController@index', 'home');
Gerando a URL:
echo $route->route('home');
Resultado
/
Parâmetros
$route->routeGET('/user/{id}', function ($id) { echo $id; });
Acessando:
/user/15
Resultado:
15
Múltiplos parâmetros
$route->routeGET('/post/{id}/comment/{comment}', function ($id, $comment) { echo "$id - $comment"; });
Expressão Regular
Também é possível limitar um parâmetro.
$route->routeGET('/user/{id:[0-9]+}', function ($id) { echo $id; });
Aceita apenas números.
Outro exemplo:
$route->routeGET('/slug/{slug:[a-z0-9-]+}', function ($slug) { echo $slug; });
Rotas Nomeadas com parâmetros
$route->routeGET('/user/{id}', 'UserController@show', 'user.show');
Gerando:
echo $route->route('user.show', [ 'id' => 10 ]);
Resultado
/user/10
Também funciona com Query String.
echo $route->route('user.show', [ 'id' => 10, 'tab' => 'posts' ]);
Resultado
/user/10?tab=posts
Grupos
$route->routeGroup( '/admin', 'Admin', function () use ($route) { $route->routeGET('/', 'DashboardController@index'); $route->routeGET('/users', 'UsersController@index'); } );
As URLs ficam:
/admin
/admin/users
E os controllers serão procurados em:
app/controllers/Admin/
Grupos Aninhados
$route->routeGroup('/admin', 'Admin', function () use ($route) { $route->routeGroup('/config', 'Config', function () use ($route) { $route->routeGET('/', 'SettingsController@index'); }); });
Resultado:
URL:
/admin/config
Controller:
app/controllers/Admin/Config/SettingsController.php
Middleware
Primeiro registre um middleware.
$route->routeMiddleware('auth', function ($next) { if (!isset($_SESSION['user'])) { die('Acesso negado.'); } $next(); });
Aplicando em uma rota.
$route->routeGET( '/dashboard', 'DashboardController@index', middleware: ['auth'] );
Middleware em grupos
$route->routeGroup( '/admin', 'Admin', function () use ($route) { $route->routeGET('/', 'DashboardController@index'); }, ['auth'] );
Todas as rotas do grupo utilizarão o middleware.
Middleware com parâmetros
Registro:
$route->routeMiddleware('role', function ($next, $role) { if ($_SESSION['role'] != $role) { die('Sem permissão.'); } $next(); });
Utilização:
$route->routeGET( '/admin', 'DashboardController@index', middleware: ['role:admin'] );
Múltiplos Middlewares
$route->routeGET( '/dashboard', 'DashboardController@index', middleware: [ 'auth', 'role:admin' ] );
A execução será:
auth
↓
role
↓
Controller
Callback como Controller
Também é possível utilizar funções anônimas.
$route->routeGET('/hello', function () { echo "Olá"; });
Callbacks também aceitam middlewares.
$route->routeGET( '/hello', function () { echo "Olá"; }, middleware: ['auth'] );
Página 404
$route->route404(function () { echo "Página não encontrada."; });
Caso não seja definida, será procurado automaticamente:
app/views/errors/404.php
Caso também não exista, será exibido:
404 - Página não encontrada.
Executando o roteador
Após registrar todas as rotas:
$route->dispatchRoute();
Normalmente isso fica no final do index.php.
Exemplo Completo
<?php use BluRoute\BluRoute; $route = new BluRoute( 'App', dirname(__DIR__) . '/app' ); $route->routeMiddleware('auth', function ($next) { if (!isset($_SESSION['user'])) { die('Não autenticado'); } $next(); }); $route->routeGET('/', 'HomeController@index', 'home'); $route->routeGET( '/dashboard', 'DashboardController@index', 'dashboard', ['auth'] ); $route->routeGroup('/admin', 'Admin', function () use ($route) { $route->routeGET('/', 'DashboardController@index'); $route->routeGET('/users', 'UsersController@index'); }, ['auth']); $route->route404(function () { echo 'Página não encontrada'; }); $route->dispatchRoute();
License
The BluRoute is provided under:
SPDX-License-Identifier: LGPL-2.1-only
Beign under the terms of the GNU Lesser General Public License version 2.1 only.
All contributions to the BluRoute are subject to this license.