简单的PHP路由器,具有前缀分组和过滤功能

0.13.0 2022-12-11 18:10 UTC

This package is auto-updated.

Last update: 2024-09-11 22:12:41 UTC


README

简单PHP路由器,具有前缀分组和过滤器

进行中

此README文件正在编写中,目前处于编写过程中。在此期间,请参阅 examples 文件夹以开始使用。

用法

请参阅 examples 文件夹以了解如何使用路由器以及分组和过滤器的用法。

安装

通过命令行

composer require alejoluc/via

或在 composer.json 中手动编写

{
  "require": {
    "alejoluc/via": "*"
  }
}

使用“门面”

为那些想要更清晰代码且不介意在这里和那里使用静态类的人提供了一个“门面”。当调用门面时,您可以使用 Router 类的任何方法。

<?php
use alejoluc\Via\RouterFacade as Router;

// [Set up Router (see file in examples) 

Router::get('login', ['LoginController', 'showForm']);
Router::group('admin/', function(){
    Router::get('createUser', ['UsersController', 'createForm']);
}, ['isLoggedIn']);

匹配处理器

调用 dispatch() 方法时可能存在三种可能的情况:没有路由匹配,或者路由匹配但某些或所有过滤器失败,或者路由匹配且没有过滤器失败。

在所有情况下,一个 Match 对象都会传递给您设置的任何匹配处理器或处理器。您可以查看 src/SampleHandlers/ 文件夹以获取几个全面的处理器。

让路由器自己构建请求字符串或使用 setRequestString()

如果没有手动指定请求字符串,路由器将尝试从 $_SERVER['REQUEST_URI']$_SERVER['PATH_INFO'] 自动获取它。此外,如果请求字符串中存在脚本文件名,它将截断该文件名;如果存在查询字符串(?& 之后的内容),它也会截断。如果您通过 Router::setRequestString() 手动设置请求字符串,则不会发生这种情况。

作为一般规则,您应该仅在了解您正在做什么以及为什么这么做的情况下手动调用 Router::setRequestString(),其余时间让路由器做脏活。

例如,如果您在服务器中未实施URL重写,您可能仍然想使用路由器,您可以通过将路由放在查询变量中(如 q)来实现。假设文件名为 index.php,则示例方法如下:

<?php
use alejoluc\Router\Router;
$router = new Router();
$q = isset($_GET['q']) ? $_GET['q'] : '/';
$router->setRequestString($q);

$router->get('/about', 'About Page'); // Will respond to /index.php?q=/about