israel-nogueira/fast-router

Classe para gerenciar as suas rotas no PHP com facilidade e segurança

v1.0.2 2023-06-21 19:58 UTC

This package is auto-updated.

Last update: 2024-05-11 18:18:23 UTC


README

topo_README.png

Instalação | Primeiros passos | Agrupamentos | Middlewares | Regex |

68747470733a2f2f706f7365722e707567782e6f72672f69737261656c2d6e6f6775656972612f666173742d726f757465722f762f737461626c652e737667 68747470733a2f2f706f7365722e707567782e6f72672f69737261656c2d6e6f6775656972612f666173742d726f757465722f646f776e6c6f616473 68747470733a2f2f706f7365722e707567782e6f72672f69737261656c2d6e6f6775656972612f666173742d726f757465722f6c6963656e73652e737667

Classe para gerenciar as suas rotas no PHP com facilidade e segurança.

INSTALAÇÃO

Instale via composer.

    composer require israel-nogueira/fast-router

PRIMEIROS PASSOS

Basta importar o autoload e inserir o namespace

<?php
    include "vendor\autoload.php";
    use IsraelNogueira\fastRouter\router;
?>

Aqui segue um exemplo de uma aplicação simples da classe

<?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 () {});
	
	
?>

AGRUPAMENTOS

<?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 () {});
		})
	})

?>

MIDDLEWARES

As middlewares são aplicáveis de uma forma muito simples:

<?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;
		});
	
	
?>

Cada função é definida de maneira que a próxima é executada apenas se a atual finalizou com sucesso; É passado como parametro único uma função closure da próxima:

<?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;
		}
	);

REGEX

<?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) {});
	
?>