phpico/router

可能是构建过的最小的功能齐全的PHP Router,适用于Web应用

1.0.0-RC2 2016-04-06 13:40 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:58:28 UTC


README

Join the chat at https://gitter.im/PHPico/Router Latest Version Software License Build Status Coverage Status Quality Score Total Downloads

PHPico Router 可能是构建过的最小的功能齐全的PHP Router,适用于Web应用。

它适用于轻量级应用。即使是嵌入式使用,如Raspberrypi。

免责声明:这个类对于初学者非常有用。通过查看这个库代码,你可以学到很多。如果你知道如何使用这个路由器,模型-视图-控制器(MVC)将变得非常简单。我保证,只需要一个类,几行代码(少于100行)。

特性

  • 非常轻量级
  • 旨在快速运行
  • 管理你的请求的GET、POST...类型
  • 基于正则表达式
  • 数组形式的配置
  • 允许回调

示例代码

下面的示例展示了你可以用这个路由器做什么。

<?php
include('../vendor/autoload.php');

class HomeController{
    function index(){
        return 'Hello people';
    }
    
    function greet($a){
        return 'Hello '.$a;
    }
}

$routes = [
    '\/greet\/(.*)' => ['POST', function(){
        return "Oh yeah callbacks :D";
    }],
    '\/greet\/(.*)' => ['GET', 'HomeController@greet'],
    '\/' => 'HomeController'
];

$router = new \PHPico\Router();
echo($router->dispatch($routes));

正则表达式

你可以使用 PCRE。唯一的规则是任何正则表达式都应像这样启动:/^.......$/,因此你不需要添加开头/结尾分隔符和斜杠。

基本路由

创建路由有多种方式,但基本方法是这个

<?php
$routes = [
    '\/' => 'HomeController'
];

HomeController 是主命名空间中的一个示例类。如果有任何命名空间,你应该添加它们。如果你使用较新的PHP版本,你可以使用 php HomeController::class

回调路由

你可以使用任何可调用来作为目标。例如这个匿名函数

<?php
$routes = [
    '\/greet\/(.*)' => function($a){
        return "Hello ".$a;
    },
];

如你所见,你可以添加参数以便获取正则表达式的捕获。 (.*) 表示捕获任何字符,零次或多次。然后只需将 $a 变量添加到其中以恢复此捕获。

HTTP 请求类型分段

默认情况下,除非指定,否则任何路由都会允许任何类型的请求。但你可以为一种或多种特定请求分割路由。例如

<?php
$routes = [
    '\/' => ['POST','HomeController']
];

这意味着除非你发送POST请求,否则对 / 路径的任何请求都将返回false。

你甚至可以添加多个选项,例如

<?php
$routes = [
    '\/' => ['GET', 'POST','HomeController']
];

处理404

如果路由未找到,路由器组件将返回false。简单而有效。

<?php
if($router->dispatch($routes) === false){
    header("HTTP/1.0 404 Not Found");
    die('Not found');
}

有什么改进的想法吗?

如果你有任何改进这个库的想法,欢迎提交包含你的改进或修复的拉取请求。请记住,目标是保持代码库尽可能小。