2013-03-13 87 views
33

我正在寻找添加一些动态的,REST式的路由到PHP应用程序。我很乐意使用现有的路由库,因此我不必重新发明轮子。然而,当我看着Slim和F3这些东西时,他们都带着我不想要的东西 - 比如模板和MVC - 都包括在内。由于我只是想要路由,所以我最终会在我的应用程序中使用大量不需要的框架代码。是否有独立的PHP路由库?

有没有一个好的库只有做路由?还是我坚持导入一个完整的框架或重新发明轮子?

+1

苗条不来模板,它是一个附加组件。我强烈建议苗条,如果你想要的只是简单的路由 – Luke 2013-03-13 17:19:23

+3

这个封闭的问题是非常有用的。你有没有找到好的。我在这里同样感兴趣。 – 2016-06-06 18:33:07

回答

26

尝试克莱恩

单个文件,独立和强大:

“klein.php是PHP一个快如闪电的路由器5.3+”

  • 灵活的正则表达式路由(灵感by Sinatra)
  • 一套用于快速构建web应用程序的样板方法
  • Almos t无开销=> 2500+请求/秒

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

+1

Klein看起来不错! – powtac 2013-03-13 17:57:36

+4

Klein的第2版不再是单个文件。不过,版本1仍然可以在这里找到:https://github.com/chriso/klein.php/tree/v1.2.0 – 2013-09-05 17:50:08

+2

另一个:https://github.com/auraphp/Aura.Router/,顺便说一下也可以看到低于klein aura性能的基准测试结果http://stackoverflow.com/a/21013740/487878 – 2014-07-13 05:02:25

5

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

require 'dispatch.php'; 

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

dispatch(); 

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

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

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

使用这种方法,您只需安装您使用的东西。

3

检出Pux(https://github.com/c9s/Pux),它针对极高性能,零依赖性,零开销(支持C扩展)。同时提供了不错的性能,PUX还提供了西纳特拉般的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 /路由”更快48.5x路线调度。 (安装了pux扩展)
  • 正则表达式调度比“symfony/routing”快31倍。 (安装了扩展卡扩展)
  • 比“klein”快69倍(安装了扩展卡扩展)。
 
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的/路由)。相反,Pux将您的路由编译为纯PHP数组进行缓存,编译后的路由可以非常快地从缓存中加载。

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

+3

只有一条简单的路线,您的测试是非常不现实的。你应该提供一个拥有100条真实世界路线和更好测试策略的新路线。任何考虑Pux的人都应该阅读:http://nikic.github.io/2014/02/18/Fast-request-routing-using-regular-expressions.html – 2015-04-11 05:01:09

5

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

https://github.com/nikic/FastRoute

16

由于对这个问题的答案,老气我认为这将是提一些更先进的解决方案,迄今在OP的情况心中有数。

的2个解决方案,尽快来我的脑海里,我看到你的问题洁具:

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

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

我已经使用了苗条路由独立的,在我的项目 - DaGhostman \ CodeWave @ github,查看标签< = 2.4,相关部分在Application\Core & Application\Controller