bluiceoficial/bluroute

BluRoute é uma biblioteca de roteamento leve para PHP.

Maintainers

Package info

github.com/bluiceoficial/bluroute

Homepage

pkg:composer/bluiceoficial/bluroute

Transparency log

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

1.0.0 2026-07-17 00:09 UTC

This package is auto-updated.

Last update: 2026-07-17 00:11:06 UTC


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.