kenphp/router

简单的PHP路由器

1.0.1 2019-01-26 06:35 UTC

This package is auto-updated.

Last update: 2024-09-15 03:44:46 UTC


README

这是一个简单的PHP路由器,适用于您的Web应用程序。该库是KenPHP项目的一部分,但也可以独立使用。

功能

  • 静态路由模式
  • 动态路由模式
  • 命名参数
  • 可选参数
  • 基于正则表达式的路由模式
  • 子路由
  • 支持Web应用程序路由
  • 路由中间件的前后处理
  • 当路由未找到时的自定义处理程序

它做什么?

  • 存储路由模式、处理程序和中间件信息
  • 解析请求以匹配模式

它不做什么?

  • 不解析路由路径从 $_SERVER 或其他任何方式。您必须提供路由路径和方法到 Router::resolve 方法。
  • 执行中间件和处理程序。它只返回一个包含匹配的路由处理程序、中间件和请求中找到的参数的数组。
  • 为什么这个库不接收 Psr\Http\Message\RequestInterface 实现并返回 Psr\Http\Message\ResponseInterface
    这个库旨在尽可能给用户最大的自由。并不是每个人都在使用PSR-7实现,我们希望尊重这一点。

要求

  • PHP 7.0 或更高版本

安装

最简单的方法是使用Composer

$ composer require kenphp/router

方法

  1. route($method, $route, $handler, $options = []) : void

    示例

    $router->route('GET', '/users', ['UserController', 'listUsers']);
  2. get($route, $handler, $options = []) : void

    示例

    $router->get('/users/{id}', ['UserController', 'getUser']);
  3. head($route, $handler, $options = []) : void

    示例

    $router->head('/users', ['UserController', 'listUsers']);
  4. post($route, $handler, $options = []) : void

    示例

    $router->post('/users', ['UserController', 'createUser']);
  5. put($route, $handler, $options = []) : void

    示例

    $router->put('/users/{id}', ['UserController', 'updateUser']);
  6. delete($route, $handler, $options = []) : void

    示例

    $router->delete('/users/{id}', ['UserController', 'deleteUser']);
  7. group($route, $fn, $options = []) : void

    示例

    $router->group('/api', function() use ($router) {
        $router->get('/products/{id}', ['ProductController', 'getProduct']);
    });
  8. setNotFoundHandler(callable $handler) : void

    示例

    $router->setNotFoundHandler(function() {
        echo 'Page not found.';
    });
  9. resolve($requestRoute, $method) : null|array

    此函数将返回一个包含以下键的数组

    • 处理程序
    • 参数
    • 可选键。这将填充来自 $options 参数的任何数据。

    示例

    $router->get('/users/{id}', ['UserController', 'getUser'], [
        'namespace' => 'app\controllers'
    ]);
    
    $routeArray = $router->resolve('/users/1', 'GET');
    
    /**
     * $routeArray would contains
     * [
     *    'handler' => ['UserController', 'getUser'],
     *    'params' => ['id' => 1],
     *    'namespace' => 'app/controllers',
     * ]
     */

示例