Este é rc router . Este é um roteador simples baseado em regex que permite passar variáveis usando espaços reservados em sua rota.
Fiz isso para flexibilizar meu cérebro e obter uma compreensão completa de como o roteamento funciona no espaço PHP. Em vez de apenas ler sobre isso e presumir que sabia o que fazia o quê, escrevi isto para solidificar meu conhecimento.
Basta usar o compositor:
composer require robert430404/rc-router
Este é um pacote do compositor, portanto depende do compositor para o carregamento automático das classes. Em seguida, você cria uma nova instância do objeto Router() e começa a atribuir suas rotas à instância. Depois de definir suas rotas, você passa Router() para Resolver() e ele trata de suas rotas.
<?php
use RcRouter Router ;
use RcRouter Utilities Resolver ;
use RcRouter Exceptions RouteNotFoundException ;
include ' vendor/autoload.php ' ;
$ router = new Router ();
$ router -> request ([ ' GET ' ], ' / ' , function () {
echo ' Closure Handler Test ' ;
});
$ uri = $ _SERVER [ ' REQUEST_URI ' ]; // You do not have to use globals here if you have access to a different source.
$ method = $ _SERVER [ ' REQUEST_METHOD ' ]; // You simply need to pass these (uri and method) as strings to the Resolver.
try {
new Resolver ( $ uri , $ method , $ router );
} catch ( RouteNotFoundException $ e ) {
echo ' 404 not found ' ;
}
O roteador suporta variáveis de URL de string e inteiro e as transmite de volta para você em uma matriz. Você pode estender isso ainda mais da maneira que desejar. O roteador é muito flexível na forma como você pode usá-lo.
Você pode passar um encerramento ou uma função de manipulador nomeada para cada rota para controlar o que acontece quando uma rota é correspondida.
Quando uma rota não é encontrada, uma RouteNotFoundException é lançada do resolvedor e permite capturar e criar seu manipulador 404.
Agora você também pode escrever seus próprios analisadores personalizados e passá-los para o resolvedor para tornar coisas como a chamada Controller@Action muito mais fáceis e limpas de implementar.
<?php
use RcRouter Router ;
use RcRouter Utilities Resolver ;
use RcRouter Exceptions RouteNotFoundException ;
use YourProject Routing CustomParser ;
include ' vendor/autoload.php ' ;
$ router = new Router ();
$ router -> request ([ ' GET ' ], ' / ' , function () {
echo ' Closure Handler Test ' ;
});
$ uri = $ _SERVER [ ' REQUEST_URI ' ]; // You do not have to use globals here if you have access to a different source.
$ method = $ _SERVER [ ' REQUEST_METHOD ' ]; // You simply need to pass these (uri and method) as strings to the Resolver.
try {
new Resolver ( $ uri , $ method , $ router , new CustomParser ());
} catch ( RouteNotFoundException $ e ) {
echo ' 404 not found ' ;
}
Se você não passar em um analisador personalizado, o padrão será o analisador integrado.
Quando há espaços reservados em sua rota, eles são retornados como uma matriz que você pode acessar em seu manipulador.
Você tem acesso a espaços reservados para strings. Ao definir suas rotas, você usa {} para definir marcadores de string como este:
<?php
$ router -> request ([ ' GET ' ], ' /{placeholder} ' , function ( $ mapped ) {
// Deal with returned data and route response here.
});
Você também tem acesso a espaços reservados para números inteiros. Ao definir sua rota, você usa {:i} para definir espaços reservados inteiros como este:
<?php
$ router -> request ([ ' GET ' ], ' /{placeholder:i} ' , function ( $ mapped ) {
// Deal with returned data and route response here.
});
Rota simples baseada em fechamento:
<?php
use RcRouter Router ;
use RcRouter Utilities Resolver ;
use RcRouter Exceptions RouteNotFoundException ;
include ' vendor/autoload.php ' ;
$ router = new Router ();
$ router -> request ([ ' GET ' ], ' / ' , function () {
echo ' Closure Handler Test ' ;
});
$ uri = $ _SERVER [ ' REQUEST_URI ' ]; // You do not have to use globals here if you have access to a different source.
$ method = $ _SERVER [ ' REQUEST_METHOD ' ]; // You simply need to pass these (uri and method) as strings to the Resolver.
try {
new Resolver ( $ uri , $ method , $ router );
} catch ( RouteNotFoundException $ e ) {
echo ' 404 not found ' ;
}
Rota simples com um manipulador nomeado:
<?php
use RcRouter Router ;
use RcRouter Utilities Resolver ;
use RcRouter Exceptions RouteNotFoundException ;
include ' vendor/autoload.php ' ;
$ router = new Router ();
$ router -> request ([ ' GET ' ], ' / ' , ' handler ' );
$ uri = $ _SERVER [ ' REQUEST_URI ' ]; // You do not have to use globals here if you have access to a different source.
$ method = $ _SERVER [ ' REQUEST_METHOD ' ]; // You simply need to pass these (uri and method) as strings to the Resolver.
try {
new Resolver ( $ uri , $ method , $ router );
} catch ( RouteNotFoundException $ e ) {
echo ' 404 not found ' ;
}
function handler ()
{
echo ' External Handler Test ' ;
}
Rota baseada em fechamento Regex com variáveis:
<?php
use RcRouter Router ;
use RcRouter Utilities Resolver ;
use RcRouter Exceptions RouteNotFoundException ;
include ' vendor/autoload.php ' ;
$ router = new Router ();
$ router -> request ([ ' GET ' ], ' /{id:i}/{post:i} ' , function ( $ mapped ) {
echo ' <pre> ' ;
var_dump ( $ mapped );
echo ' </pre> ' ;
echo ' Route Found ' ;
});
$ uri = $ _SERVER [ ' REQUEST_URI ' ]; // You do not have to use globals here if you have access to a different source.
$ method = $ _SERVER [ ' REQUEST_METHOD ' ]; // You simply need to pass these (uri and method) as strings to the Resolver.
try {
new Resolver ( $ uri , $ method , $ router );
} catch ( RouteNotFoundException $ e ) {
echo ' 404 not found ' ;
}
Rota Regex com variáveis e manipulador externo:
<?php
use RcRouter Router ;
use RcRouter Utilities Resolver ;
use RcRouter Exceptions RouteNotFoundException ;
include ' vendor/autoload.php ' ;
$ router = new Router ();
$ router -> request ([ ' GET ' ], ' /{id:i}/{post:i} ' , ' handler ' );
$ uri = $ _SERVER [ ' REQUEST_URI ' ]; // You do not have to use globals here if you have access to a different source.
$ method = $ _SERVER [ ' REQUEST_METHOD ' ]; // You simply need to pass these (uri and method) as strings to the Resolver.
try {
new Resolver ( $ uri , $ method , $ router );
} catch ( RouteNotFoundException $ e ) {
echo ' 404 not found ' ;
}
function handler ( $ mapped )
{
echo ' <pre> ' ;
var_dump ( $ mapped );
echo ' </pre> ' ;
echo ' Route Found ' ;
}
A variável "$mapped" retorna uma estrutura como esta:
<?php
$ mapped = [
' all ' => [
' id ' => 0 ,
' name ' => ' Robert '
],
' int ' => [
' id ' => 0
],
' string ' => [
' name ' => ' Robert '
],
];