40

我希望向 PHP 应用程序添加一些动态的 REST 式路由。我很想使用现有的路由库,这样我就不必重新发明轮子了。

然而,当我看到像 Slim 和 F3 这样的东西时,它们都带有我不想要的东西——比如模板和 MVC——包括在内。因为我只想要路由,所以我最终会在我的应用程序中得到很多我不需要的框架代码。

那里有一个只做路由的好图书馆吗?还是我坚持导入完整的框架或重新发明轮子?

4

7 回答 7

29

试试克莱因

单个文件,独立且健壮:

“klein.php 是适用于 PHP 5.3+ 的闪电般快速的路由器”

  • 灵活的正则表达式路由(受 Sinatra 启发)
  • 一组用于快速构建 Web 应用程序的样板方法
  • 几乎没有开销 => 2500+ 请求/秒

https://github.com/chriso/klein.php

于 2013-03-13T17:18:36.763 回答
18

由于这个问题的答案很老,我认为在 OP 中提及一些更新的案例解决方案是一个不错的主意。

看到您的问题后,我想到的 2 个解决方案:

Phroute 建立在 FastRoute 之上,因此它们都需要 PHP 5.4。

如果你需要 PHP 5.3+ 的解决方案,我肯定会推荐 Slim Framework 的路由。如果您不想要框架附带的任何其他功能,您可以提取路由部分并仅使用它们(SLIM 已获得 MIT 许可,因此您可以做任何事情)

我已经在我的一个项目中单独使用了 slim 路由 - DaGhostman\CodeWave @ github,请参阅标签 <=2.4,相关部分在Application\Core&中Application\Controller

于 2015-03-26T16:38:40.340 回答
6

尝试调度:https ://github.com/noodlehaus/dispatch

require 'dispatch.php';

get('/', function () {
   echo "Hello world!\n";
});

dispatch();

它是 PHP 的单文件路由框架。重量很轻,很容易使用。这个和 Slim 是我的最爱。

我根本不需要一个成熟的框架。如果您需要 ORM,请尝试 Redbean。

如果您需要模板引擎,请使用 Twig。

使用这种方法,您只需安装您使用的内容。

于 2013-07-03T13:30:11.370 回答
6

Fastroute 是一个独立的路由库。它基于 OOP 模型并具有完整的测试框架。开源和许可是免费的。如果您正在为自己的项目寻找修改的东西,这是一个很好的起点。

https://github.com/nikic/FastRoute

于 2014-04-06T08:59:36.833 回答
5

PHP - 非常简单 路由器非常简单。
PHP – RegexRouter在我看来更好:)

于 2015-09-08T12:39:13.023 回答
3

查看 Pux ( https://github.com/c9s/Pux ),它的目标是极高性能、零依赖、零开销(支持 C 扩展)。在提供良好性能的同时,Pux 还提供了类似 Sinatra 的 API 供您定义自己的路由路径:

$mux = 新的 Pux\Mux;
$mux->any('/product', ['ProductController','listAction']);
$mux->get('/product/:id', ['ProductController','itemAction'] , [
    '需要' => ['id' => '\d+', ],
    '默认' => ['id' => '1', ]
]);
$mux->post('/product/:id', ['ProductController','updateAction'] , [
    '需要' => ['id' => '\d+', ],
    '默认' => ['id' => '1', ]
]);
$mux->delete('/product/:id', ['ProductController','deleteAction'] , [
    '需要' => ['id' => '\d+', ],
    '默认' => ['id' => '1', ]
]);
$route = $mux->dispatch('/product/1');

基准测试结果:

  • 在静态路由调度中比“symfony/routing”快 48.5 倍。(安装了 pux 扩展)
  • 在正则表达式调度中比“symfony/routing”快 31 倍。(安装了 pux 扩展)
  • 比“klein”(安装了 pux 扩展)快 69 倍。
n=10000
运行 php 数组 - . 138796.45654569/s
运行 pux - 。124982.98519026/s
运行克莱因 - 。1801.5070399717/s
火腿肠——。13566.734991391/s
奔跑光环——。39657.986477172/s
运行 symfony/路由 - . 1934.2415677861/s

                     Rate Mem php array pux aura ham symfony/routing klein
      php 数组 138.8K/s 0B ---90% -28% -9% -1% -1%
            像素 124.98K/s 0B 111% -- -31%-10% -1% -1%
           光环 39.66K/s 0B 349%315% ---34% -4% -4%
            火腿 13.57K/s 0B 1023%921% 292% -- -14% -13%
symfony/路由 1.93K/s 786K 7175%6461%2050%701% -- -93%
          克莱因 1.8K/s 262K 7704%6937%2201%753% 107% --


=================================== 条形图============== =====================

        php 数组 138.8K/s | ██████████████████████████████████████████████████ ██████████ |
              像素 124.98K/s | ██████████████████████████████████████████████████ ████ |
             光环 39.66K/s | █████████████████ |
              火腿 13.57K/s | █████ |
  symfony/路由 1.93K/s | |
            克莱因 1.8K/s | |


=============================== 系统信息================== =============

PHP版本:5.5.6
CPU 品牌字符串:Intel(R) Core(TM) i5-3427U CPU @ 1.80GHz

使用 XDebug 扩展。

Pux 尽量不消耗计算时间来动态构建所有路由(如 Symfony/Routing)。相反,Pux 将您的路由编译为普通的 PHP 数组进行缓存,编译后的路由可以非常快速地从缓存中加载。

借助 Pux PHP 扩展支持,您可以比纯 PHP Pux 快 1.5~2 倍地加载和调度路由。

于 2014-01-09T07:08:02.983 回答
1

看看锂框架的路由器类,因为大量使用依赖注入,你可以配置路由器类,通过调用config()

于 2013-03-13T17:20:44.293 回答