我希望为PHP应用程序添加一些动态的,REST式的路由。我想使用现有的路由库,所以我不必重新发明轮子。
然而,当我看到像Slim和F3这样的东西时,它们都带有我不想要的东西 - 比如模板和MVC。由于我只想要路由,我最终会在我的应用程序中添加许多我不需要的框架代码。
那里有一个好的图书馆只有路由吗?还是我坚持导入一个完整的框架或重新发明轮子?
答案 0 :(得分:28)
尝试 Klein :
单个文件,独立且健壮:
“klein.php是PHP 5.3 +的快速路由器”
答案 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模型,并具有完整的测试框架。开源和许可证是免费的。如果您正在寻找可以为自己的项目修改的内容,这是一个很好的起点。
答案 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');
基准测试结果:
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()