israel-nogueira / fast-router
类用于轻松且安全地管理PHP中的路由
v1.0.2
2023-06-21 19:58 UTC
Requires
- php: ^7.3||^8.0
README
类用于轻松且安全地管理PHP中的路由。
安装
通过composer安装。
composer require israel-nogueira/fast-router
第一步
只需导入自动加载并插入命名空间。
<?php include "vendor\autoload.php"; use IsraelNogueira\fastRouter\router; ?>
以下是一个使用该类的简单应用的示例
<?php namespace IsraelNogueira\Models; use IsraelNogueira\fastRouter\router; //------------------------------------------------------------------------------- // No modo estático a requisição é direto no método //------------------------------------------------------------------------------- router::get('admin/path1/path2', function () {}); router::post('admin/path1/path2', function () {}); router::put('admin/path1/path2', function () {}); router::delete('admin/path1/path2', function () {}); //------------------------------------------------------------------------------- // O método "any" aceita qualquer tipo de requisição //------------------------------------------------------------------------------- router::any('admin/path1/path2', function () {}); //------------------------------------------------------------------------------- // Ele aceita o seguinte grupo de requests: //------------------------------------------------------------------------------- // 'ANY','MATH','GET', 'REDIRECT','POST','RMDIR','MKDIR', // 'INDEX','MOVE','TRACE','DELETE','TRACK','PUT','HEAD','OPTIONS','CONNECT' // // // math aceitará os métodos listados na array //------------------------------------------------------------------------------- router::math(['POST','GET'],'admin/path1/path2', function () {}); ?>
分组
<?php namespace IsraelNogueira\Models; use IsraelNogueira\fastRouter\router; /* Rotas: /admin /admin/usuarios /admin/fotos /admin/produtos/detalhes /admin/produtos/fotos */ router::group('admin',function(){ router::get('usuarios', function () {}); router::get('fotos', function () {}); router::group('produtos',function(){ router::get('detalhes', function () {}); router::get('fotos', function () {}); }) }) ?>
中间件
中间件以非常简单的方式应用
<?php namespace IsraelNogueira\Models; use IsraelNogueira\fastRouter\router; router::group([ 'prefix'=>'/admin', 'middleware'=>[ 'App/Middlewares/auth@middl_1', 'App/Middlewares/auth@middl_2', 'App/Middlewares/auth@middl_3' ] ], function($return){ print_r($return); exit; }); ?>
每个函数的定义方式是,只有当前函数成功完成,下一个函数才会执行;下一个函数作为一个唯一的函数 closure 传递给当前函数
<?php namespace IsraelNogueira\Models; use IsraelNogueira\fastRouter\router; function middl_1($return=[], $next=null){ // faz o que tiver que fazer // ... ... ... // caso você queira parar o processo e retornar um erro if($qualquer_erro){ throw new Exception("Error Processing Request", 1); } // executa a próxima $next($return, $next); } function middl_2($return=[], $next=null){ // faz o que tiver que fazer // ... ... ... // caso você queira apenas armazenar o erro if($qualquer_erro){ $return[] = ['status'=>false,'middleware'=>[__CLASS__.' > '.__FUNCTION__]]; } // executa a próxima $next($return, $next); } function middl_3($return=[], $next=null){ // faz o que tiver que fazer // ... ... ... // Ou ainda executar uma função paralela if($qualquer_erro){ $return[] = ['status'=>false,'middleware'=>[__CLASS__.' > '.__FUNCTION__]]; $this->corrige_algo(); } // executa a próxima $next($return, $next); } router::group([ 'prefix'=>'/admin', 'middleware'=>['middl_1','middl_2','middl_3']], function($return){ print_r($return); exit; } );
正则表达式
<?php namespace IsraelNogueira\Models; use IsraelNogueira\fastRouter\router; //------------------------------------------------------- // Variáveis ID e NOME podem ser passadas como parâmetros //------------------------------------------------------- router::get('admin/{ID}/{NOME}', function ($ID,$NOME) {}); //-------------------------------------------------------------------------------------- // No regex, a expressão {idade[0-9]+} é uma expressão regular que define // um padrão de correspondência de texto que procura por uma string que // começa com a sequência de caracteres idade, seguida por um ou mais dígitos de 0 a 9. // eo O \d representa qualquer dígito numérico e o sinal de + significa // que o padrão anterior deve aparecer uma ou mais vezes na string correspondente. //-------------------------------------------------------------------------------------- router::get('admin/{idade:[0-9]+}/{id:\d+}', function ($iddade,$id) {}); /* |----------------------------------------------------------------------------------- | NÃO OBRIGATORIEDADE DO PARAMETRO |----------------------------------------------------------------------------------- | | Caso não queira um parametro obrigatório basta colocar ele nesse formato: [/{param}/] exemplo: | |----------------------------------------------------------------------------------- |*/ router::get('admin/{id:\d+}[/{{title}}/]', function ($id,$title) {}); /* |----------------------------------------------------------------------------------- | Para parametros não obrigatórios enclosurados |----------------------------------------------------------------------------------- | | Isso quer dizer que apenas o admin, id e nome são obrigatórios. | Quanto ao enclousuramento ficará com o formato [/{param}/] com barra no inicio e no fim; | Enclosurando fica: [/{{nome}}[/{{sobrenome}}/]/] | Para facilitar a visualização será algo mais ou menos assim: | [/ param1 | [/ param1 | [/ param1 | [/ param1 /] | /] | /] | /] ------------------------------------------------------------------------------------- */ router::post('admin/{id:\d+}[/{{title}}[/{{length}}[/{{last}}/]/]/]', function ($id,$title,$length,$last) {}); ?>