是否有一个独立的PHP路由库?

时间:2013-03-13 17:14:27

标签: php frameworks routing

我希望为PHP应用程序添加一些动态的,REST式的路由。我想使用现有的路由库,所以我不必重新发明轮子。

然而,当我看到像Slim和F3这样的东西时,它们都带有我不想要的东西 - 比如模板和MVC。由于我只想要路由,我最终会在我的应用程序中添加许多我不需要的框架代码。

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

7 个答案:

答案 0 :(得分:28)

尝试 Klein

单个文件,独立且健壮:

“klein.php是PHP 5.3 +的快速路由器”

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

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

答案 1 :(得分:17)

由于这个问题的陈旧回答,我认为在OP中提到一些更新的案例是一个非常好的主意。

我看到你的问题后立刻想到了两个解决方案:

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

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

我在我的一个项目中使用了瘦路由独立--DaGhostman \ CodeWave @ github,参见标签< = 2.4,相对部分在Application\Core& Application\Controller

答案 2 :(得分:6)

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

require 'dispatch.php';

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

dispatch();

这是PHP的单文件路由框架。非常轻便,非常容易使用。这个和Slim是我的最爱。

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

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

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

答案 3 :(得分:5)

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

https://github.com/nikic/FastRoute

答案 4 :(得分:5)

PHP – seriously simple Router非常简单 PHP – RegexRouter在我看来更好:)

答案 5 :(得分:3)

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

$mux = new Pux\Mux;
$mux->any('/product', ['ProductController','listAction']);
$mux->get('/product/:id', ['ProductController','itemAction'] , [
    'require' => [ 'id' => '\d+', ],
    'default' => [ 'id' => '1', ]
]);
$mux->post('/product/:id', ['ProductController','updateAction'] , [
    'require' => [ 'id' => '\d+', ],
    'default' => [ 'id' => '1', ]
]);
$mux->delete('/product/:id', ['ProductController','deleteAction'] , [
    'require' => [ 'id' => '\d+', ],
    'default' => [ 'id' => '1', ]
]);
$route = $mux->dispatch('/product/1');

基准测试结果:

  • 比静态路由调度中的“symfony / routing”快48.5倍。 (安装了pux扩展)
  • 比正则表达式调度中的“symfony / routing”快31倍。 (安装了pux扩展)
  • 比“klein”快69倍(安装了pux扩展)。
n=10000
Runing php array - . 138796.45654569/s
Runing pux - . 124982.98519026/s
Runing klein - . 1801.5070399717/s
Runing ham - . 13566.734991391/s
Runing aura - . 39657.986477172/s
Runing symfony/routing - . 1934.2415677861/s

                     Rate   Mem php array pux aura ham symfony/routing klein
      php array  138.8K/s    0B        ---90% -28% -9%             -1%   -1%
            pux 124.98K/s    0B      111%  -- -31%-10%             -1%   -1%
           aura  39.66K/s    0B      349%315%   ---34%             -4%   -4%
            ham  13.57K/s    0B     1023%921% 292%  --            -14%  -13%
symfony/routing   1.93K/s  786K     7175%6461%2050%701%              --  -93%
          klein    1.8K/s  262K     7704%6937%2201%753%            107%    --


================================== Bar Chart ==================================

        php array  138.8K/s | ████████████████████████████████████████████████████████████  |
              pux 124.98K/s | ██████████████████████████████████████████████████████        |
             aura  39.66K/s | █████████████████                                             |
              ham  13.57K/s | █████                                                         |
  symfony/routing   1.93K/s |                                                               |
            klein    1.8K/s |                                                               |


============================== System Information ==============================

PHP Version: 5.5.6
CPU Brand String: Intel(R) Core(TM) i5-3427U CPU @ 1.80GHz

With XDebug Extension.

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

使用Pux PHP Extension支持,您可以比纯PHP Pux快1.5~2倍加载和发送路由。

答案 6 :(得分:1)

查看Router class of the lithium framework,因为大量使用依赖注入,您可以通过calling config()

配置路由器类