89bsilva/my-route

简单路由控制

v0.0.3 2021-03-02 02:08 UTC

This package is auto-updated.

Last update: 2024-09-05 03:11:32 UTC


README

MyRoute 是一个用 PHP 开发的工具,用于实现非常简单的路由控制

安装

$ composer require 89bsilva/my-route

第一步

导入 composer 的 autoload

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

创建 MyRoute 对象

实例化类时,将创建 .htaccess 文件,其中包含重写 URL 的配置,以指向需要手动创建的 index.php 文件。注意:如果 .htaccess 文件已存在,则不会创建。为了使 MyRoute 正常工作,需要为入口文件启用 URL 重写,并在 $_GET['MyRouteURL'] 中设置重写值。

<?php
$routes = new MyRoute();

创建路由

MyRoute 接受并控制以下类型的请求:GET、POST、PUT、DELETE 和 OPTIONS。

创建路由可使用以下方法

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

创建时,需要在参数 "$url" 中指定要创建的路由地址,在参数 "$pageFilePath" 中指定将用于处理请求的文件地址。注意:MyRoute 将 composer vendor 文件夹的上一级目录作为基础地址来包含文件。路由按照创建的顺序排列,MyRoute 返回第一个满足条件的路由。

示例

  • 创建路由
    • /,由文件 home.html 控制,当请求类型为 "GET"
    • /contato,由文件 contato.html 控制,当请求类型为 "GET"
    • /contato/salvar,由文件 salvar.php 控制,当请求类型为 "POST""PUT"
<?php
$routes->get('/', 'home.html');
$routes->get('/contato', 'contato.html');
$routes->to(array('POST', 'PUT'), '/contato/salvar', 'salvar.php');

可以使用一个类和一个方法来控制一个路由,为此需要在文件扩展名和类名之后放置 ":",然后放置要实例化的类的名称,之后放置 "=" 和要调用的方法名称。注意:为了正常工作,类名和方法名应与文件中的一致。

示例

  • 创建路由
    • /,由类 "MeuSite" 和方法 "home" 在文件 site.php 中控制,当请求类型为 "GET"
    • /contato,由类 "MeuSite" 和方法 "contato" 在文件 site.php 中控制,当请求类型为 "GET"
    • /contato/salvar,由类 "MeuSite" 和方法 "salvar" 在文件 site.php 中控制,当请求类型为 "POST"
<?php
$routes->get('/', 'site.php:MeuSite=home');
$routes->get('/contato', 'site.php:MeuSite=contato');
$routes->post('/contato/salvar', 'site.php:MeuSite=salvar');

可以通过 URL 接收值,为此需要在路由标识的开始处放置 ":",这样原本的地址将成为在文件包含时可用的变量名称。注意:如果传递了类名和方法名,则变量将作为方法的参数传递。

示例

  • 创建路由
    • /api-class/user/id,其中 id 是变量,由类 "Api" 和方法 "read" 在文件 api-class.php 中控制,当请求类型为 "GET"
    • /api/user/id,其中 id 是变量,由文件 api.php 控制,当请求类型为 "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');

还可以创建一个不精确的路由,为此可以在路由前放置 "?",这样路由将接受任何路径。注意:将提供变量 $remaining,它是一个数组,其中每个元素都是 ? 符号之后的路由的一部分。

示例

  • 创建路由
    • /? 由类 "NotFound" 控制,方法 "noExist" 在文件 404.php 中,适用于任何类型的请求
<?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'); 

保护路由

要保护路由,需要调用 MyRoute 实例的 "guard($route, $filePath)" 方法。在调用 "guard()" 方法之前,需要已经创建了一个路由。参数 $route 是要保存的 URL。参数 $filePath 是将用于执行保护的文件的地址。该文件必须包含一个将在 MyRoute 加载负责响应该路由的文件之前调用的函数/方法。这个函数/方法应处理授权,如果允许进入路由,则返回一个值 TRUE,只有这样 MyRoute 才会继续执行以交付负责响应路由的文件

示例

  • 使用文件 "api.php" 保护路由 /api/?,使用函数 "proteger"
<?php
$route->guard('/api/?', 'api.php@proteger');

示例

  • 使用文件 "guardas.php" 保护路由 /api/?,使用类 "GuardasDeRotas" 和方法 "api"
<?php
$route->guard('/api/?', 'guardas.php:GuardasDeRotas=api');

为了方便保护路由,可以命名路由,这样就可以将路由名称而不是 URL 传递给 guard 方法。要命名一个路由,应将名称放在路由 URL 的开头 [] 中。注意:路由变量将在函数/方法的调用中传递

示例

  • 创建路由 "/agenda/:data/gerar-pdf",命名为 "gPDF",由类 "MeuSite" 控制,方法 "agenda" 在文件 site.php 中,当请求类型为 "GET"
  • 使用文件 "guardas.php" 保护路由 /agenda/:data/gerar-pdf,使用类 "GuardasDeRotas" 和方法 "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');

最后一步

在完成路由创建后,需要调用 "activate" 方法。之后,MyRote 将配置并激活!

<?php
$routes->activate(); 

作者

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

许可

MyDatabase 在 MIT 许可下授权 - 请参阅 LICENSE 文件以获取更多详细信息。