89bsilva / my-route
简单路由控制
Requires
- php: ^7.3
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
文件以获取更多详细信息。