我正在寻找添加一些动态的,REST式的路由到PHP应用程序。我很乐意使用现有的路由库,因此我不必重新发明轮子。然而,当我看着Slim和F3这些东西时,他们都带着我不想要的东西 - 比如模板和MVC - 都包括在内。由于我只是想要路由,所以我最终会在我的应用程序中使用大量不需要的框架代码。是否有独立的PHP路由库?
有没有一个好的库只有做路由?还是我坚持导入一个完整的框架或重新发明轮子?
我正在寻找添加一些动态的,REST式的路由到PHP应用程序。我很乐意使用现有的路由库,因此我不必重新发明轮子。然而,当我看着Slim和F3这些东西时,他们都带着我不想要的东西 - 比如模板和MVC - 都包括在内。由于我只是想要路由,所以我最终会在我的应用程序中使用大量不需要的框架代码。是否有独立的PHP路由库?
有没有一个好的库只有做路由?还是我坚持导入一个完整的框架或重新发明轮子?
尝试克莱恩:
单个文件,独立和强大:
“klein.php是PHP一个快如闪电的路由器5.3+”
Klein看起来不错! – powtac 2013-03-13 17:57:36
Klein的第2版不再是单个文件。不过,版本1仍然可以在这里找到:https://github.com/chriso/klein.php/tree/v1.2.0 – 2013-09-05 17:50:08
另一个:https://github.com/auraphp/Aura.Router/,顺便说一下也可以看到低于klein aura性能的基准测试结果http://stackoverflow.com/a/21013740/487878 – 2014-07-13 05:02:25
有一个看Router class of the lithium framework,因为大量使用依赖注入可以配置路由器类的,由calling config()
尝试调度:https://github.com/noodlehaus/dispatch
require 'dispatch.php';
get('/', function() {
echo "Hello world!\n";
});
dispatch();
这是一个PHP的单文件路由框架。非常轻巧,非常容易使用。这一个和Slim是我的最爱。
我根本不需要完整的框架。如果您需要ORM,请尝试Redbean。
如果您需要模板引擎,请使用Twig。
使用这种方法,您只需安装您使用的东西。
检出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');
的基准测试结果:
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倍的路径。
只有一条简单的路线,您的测试是非常不现实的。你应该提供一个拥有100条真实世界路线和更好测试策略的新路线。任何考虑Pux的人都应该阅读:http://nikic.github.io/2014/02/18/Fast-request-routing-using-regular-expressions.html – 2015-04-11 05:01:09
Fastroute是一个独立的路由库。它基于OOP模型并具有完整的测试框架。开源和许可证是免费的。如果你正在寻找一些可以为你自己的项目修改的东西,这是一个很好的开始。
由于对这个问题的答案,老气我认为这将是提一些更先进的解决方案,迄今在OP的情况心中有数。
的2个解决方案,尽快来我的脑海里,我看到你的问题洁具:
Phroute建立在FastRoute之上,因此它们都需要PHP 5.4。
如果你需要一个PHP 5.3+的解决方案,我肯定会推荐Slim Framework的路由。如果你不需要框架附带的任何其他功能,你可以提取路由部分并只使用它们(SLIM是MIT许可的,因此你可以做任何事情)
我已经使用了苗条路由独立的,在我的项目 - DaGhostman \ CodeWave @ github,查看标签< = 2.4,相关部分在Application\Core
& Application\Controller
。
PHP – seriously simple Router真的很好,很简单。
PHP – RegexRouter在我看来更好:)
苗条不来模板,它是一个附加组件。我强烈建议苗条,如果你想要的只是简单的路由 – Luke 2013-03-13 17:19:23
这个封闭的问题是非常有用的。你有没有找到好的。我在这里同样感兴趣。 – 2016-06-06 18:33:07