定制 89bsilva/my-route 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

89bsilva/my-route

Composer 安装命令:

composer require 89bsilva/my-route

包简介

Para controle simples de rotas

README 文档

README

MyRoute é uma ferramenta desenvolvida em PHP para realizar um controle muito simples de rotas

Instalação

$ composer require 89bsilva/my-route

Primeiro Passo

Importar o autoload do composer

<?php
require './vendor/autoload.php';

Criando o obejto MyRoute

Ao instânciar a classe será criado o arquivo .htaccess com as configurações de reescrita de url para o arquivo index.php que deverá ser criado manualmente. Obs.: Caso o arquivo .htaccess já exista não será criado e para que o MyRoute funcione é necessário a reescrita de url para o arquivo de entrada com o valor da reescrita em $_GET['MyRouteURL']

<?php
$routes = new MyRoute();

Criando as Rotas

O MyRoute aceita e controla os tipos de requisições: GET, POST, PUT, DELETE e OPTIONS.

Para criar as rotas são disponibilizado os seguintes métodos:

<?php
    #Método Utilizado para criar uma rota que responde a todos os tipos de requisições
    all(string $url, string $pageFilePath)

    #Método Utilizado para criar uma rota que responde a requisições do tipo GET
    get(string $url, string $pageFilePath)
    
    #Método Utilizado para criar uma rota que responde a requisições do tipo POST
    post(string $url, string $pageFilePath)
    
    #Método Utilizado para criar uma rota que responde a requisições do tipo PUT
    put(string $url, string $pageFilePath)
    
    #Método Utilizado para criar uma rota que responde a requisições do tipo DELETE
    delete(string $url, string $pageFilePath)
   
    #Método Utilizado para criar uma rota que responde a requisições do tipo OPTIONS
    options(string $url, string $pageFilePath)
        
    #Método Utilizado para criar uma rota que responde a requisições dos tipos passados em $to 
    to(array $to, string $url, string $pageFilePath)
        
    #Método Utilizado para proteger uma rota já criada com uma das chamadas acima
    guard(string $route, string $filePath)

Para criar é necessário informar no parâmetro "$url" o endereço da rota que deseja criar e no parâmetro "$pageFilePath" o endereço do arquivo que será incluido para lidar com a requisição Obs.: O MyRoute leva em consideração como endereço base para fazer o include o nível anterior da pasta vendor do composer. As rotas seguem a ordem em que foram criadas, o MyRoute devolve a primeira rota que os critérios foram atendidos.

Exemplo:

  • Criar as rotas:
    • /, controlada pelo arquivo: home.html, quando o tipo de requisição for: "GET"
    • /contato, controlada pelo arquivo: contato.html, quando o tipo de requisição for: "GET"
    • /contato/salvar, controlada pelo arquivo: salvar.php, quando o tipo de requisição for: "POST" ou "PUT"
<?php
$routes->get('/', 'home.html');
$routes->get('/contato', 'contato.html');
$routes->to(array('POST', 'PUT'), '/contato/salvar', 'salvar.php');

É possível utilizar uma classe e um método para controlar uma rota, para isso será necessário colocar ":" logo após a extensão do arquivo e o nome da classe que será instanciada depois colocar "=" e o método que deverá ser chamado Obs.: Para funcionar o nome da classe e o do método dever ser informado igualmente está no arquivo.

Exemplo:

  • Criar as rotas:
    • /, controlada pela classe: "MeuSite", metodo: "home" no arquivo: site.php, quando o tipo de requisição for: "GET"
    • /contato, controlada pela classe: "MeuSite", metodo: "contato" no arquivo: site.php, quando o tipo de requisição for: "GET"
    • /contato/salvar, controlada pela classe: "MeuSite", metodo: "salvar" no arquivo: site.php, quando o tipo de requisição for: "POST"
<?php
$routes->get('/', 'site.php:MeuSite=home');
$routes->get('/contato', 'site.php:MeuSite=contato');
$routes->post('/contato/salvar', 'site.php:MeuSite=salvar');

É possível receber valores pela url, para isso será necessário colocar ":" no inicio da identificação da rota, assim o que seria o endereço será o nome da variável disponível na inclusão do arquivo. Obs.: Se for passado um nome de classe e método a variável será passada como argumento na chamada do método.

Exemplo:

  • Criar as rotas:
    • /api-class/user/id onde id será variável, controlada pela classe: "Api", metodo: "read" no arquivo: api-class.php, quando o tipo de requisição for: "GET"
    • /api/user/id onde id será variável, controlada pelo arquivo: api.php, quando o tipo de requisição for: "GET"
<?php
#Será criado a váriavel $id e estará disponível para o arquivo api.php
$routes->get('/api/user/:id', 'api.php'); 

#Será chamado o método read de Api e passado $id como argumento da chamada. Api->read($id)
$routes->get('/api-class/user/:id', 'api-class.php:Api=read');

Também é possível criar uma rota não exata, para isto para colocar "?" como rota que a partir daí a rota aceitará qualquer caminho. Obs.: Será disponibilizado uma variável (ou passado como argumento da chamada do método) $remaining com um array onde cada elemento será uma parte da rota após o sinal de ?.

Exemplo:

  • Criar as rotas:
    • /? controlada pela classe: "NotFound", metodo: "noExist" no arquivo: 404.php, para qualquer tipo de requisição
<?php
/**
 * Se foi solicitado a rota: /a/b/c/d e não houver nenhuma configuração de rota anterior a rota abaixo
 * o MyRoute irá chamar o método noExist da Classe NotFound e passará o seguinte array como argumento. array('a','b','c','d')
*/
$routes->all('/?', '404.php:NotFound=noExist'); 

Protegendo Rotas

Para proteger rotas é necessário chamar o método "guard($route, $filePath)" da instância MyRoute. Antes dchamar o método "guard()" é necessário ter uma rota já criada. O parâmetro $route é a URL que se deseja guardar. O parâmetro $filePath é o endereço do arquivo que será incluido para realizar a proteção. Esse arquivo deve conter uma função/método que será chamado antes do MyRoute carregar o arquivo responsável por responder a rota. Essa função/método deve lidar com autorização e caso seja permitido entrar na rota deve ser retornado um valor TRUE, somente assim o MyRoute prosseguirá com as ações para entregar o arquivo responsável por responder a rota

Exemplo:

  • Proteger a rota: /api/? utilizando o arquivo: "api.php" com uma função: "proteger"
<?php
$route->guard('/api/?', 'api.php@proteger');

Exemplo:

  • Proteger a rota: /api/? utilizando o arquivo: "guardas.php" com uma classe: "GuardasDeRotas" e o método: "api"
<?php
$route->guard('/api/?', 'guardas.php:GuardasDeRotas=api');

Para facilitar a proteção de rotas é possível nomear as rotas, assim ao invés de passar a URL passa o nome da rota para o método guard. Para nomear uma rota deve colocar o nome que deseja entre [] no início da URL da rota. Obs.: As váriaveis de rota serão passadas na chamada da função/método

Exemplo:

  • Criar a rota "/agenda/:data/gerar-pdf" nomear a rota para "gPDF", controlada pela classe: "MeuSite", metodo: "agenda" no arquivo: site.php, quando o tipo de requisição for: "GET"
  • Proteger a rota: /agenda/:data/gerar-pdf utilizando o arquivo: "guardas.php" com uma classe: "GuardasDeRotas" e o método: "gerarPDF"
<?php
#Criando a rota
$route->get('[gPDF]/agenda/:data/gerar-pdf', 'site.php:MeuSite=agenda');

#Criando um guarda para a rota
$route->guard('gPDF', 'guardas.php:GuardasDeRotas=gerarPDF');

Último Passo

Logo após terminar de criar as rotas é necessário chamar o método "activate". Após isso o MyRote estará configurado e ativo!

<?php
$routes->activate(); 

Autor

Bruno Silva Santana - ibrunosilvas@gmail.com - https://github.com/ibrunosilvas

Licença

MyDatabase está licenciado sob a licença MIT - consulte o arquivo LICENSE para mais detalhes.

89bsilva/my-route 适用场景与选型建议

89bsilva/my-route 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 14 次下载、GitHub Stars 达 0, 最近一次更新时间为 2020 年 10 月 25 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 89bsilva/my-route 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 89bsilva/my-route 我们能提供哪些服务?
定制开发 / 二次开发

基于 89bsilva/my-route 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 14
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 3
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 1
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2020-10-25