有代码示例吗?这是我得到的:
// index.php
require_once __DIR__ . '/Klein/Klein.php';
$klein = new \Klein\Klein();
$klein->respond(function () {
return 'All the things';
});
在 PHP 5.3 上,这会返回一个错误(致命错误:找不到类 'Klein\ServiceProvider')。
好的,我得到了一些似乎可以工作的代码。不能说我推荐它,但它加载 Klein 时没有错误,至少现在是这样。
<?php
function include_dir($path) {
if(is_dir($path)) {
foreach (glob($path.'*') as $filename) {
if(is_file($filename) && pathinfo($filename, PATHINFO_EXTENSION) == 'php') {
require_once $filename;
} elseif(is_dir($filename)) {
include_dir($filename.'/');
}
}
}
}
require_once __DIR__ . '/Klein/Exceptions/KleinExceptionInterface.php';
require_once __DIR__ . '/Klein/Exceptions/HttpExceptionInterface.php';
include_dir(__DIR__ . '/Klein/');
$klein = new \Klein\Klein();
$klein->respond(function () {
return 'All the things';
});
我从 Klein 源目录上的一个小循环开始,我从这里拿起:https ://stackoverflow.com/a/599694/1004008
但是,代码具有内部依赖项,这些依赖项期望由自动加载器完成。这些文件将包含在上面的循环中,但不是按照所需的顺序。所以我在运行循环之前手动包含了上面的两个异常接口。它有点脆弱,因为开发人员可以随时重新排列这些依赖项,但它确实有效。
更正确的答案是使用自动装载机。我不确定你为什么不喜欢 Composer 的自动加载器,但它非常漂亮且易于使用。自动加载的东西是缓存的,所以它不会真正影响性能。您可以使用独立于包管理器的自动加载器。除了将 composer.json 和 vendor/ 目录放在项目根目录中之外,Composer 不会过多地规定您的项目结构。同时,您可以使用 Composer 自动安装各种 PHP 库、锁定版本或获取更新。这是一个很好的工具。如果您有共享主机,您可以在本地项目上运行 Composer,然后上传结果。抱歉,我相信你有你的理由,只是 Composer 很可能是多年来 PHP 领域发生的最酷的事情。
但是如果你不喜欢 Composer,或者因为一些外部限制而不能使用它,还有其他 PSR-0/PSR-4 自动加载器:
https://gist.github.com/jwage/221634
https://stackoverflow.com/a/12836587/1004008
或者你可以自己动手:http: //zaemis.blogspot.fr/2012/05/writing-minimal-psr-0-autoloader.html
看起来只有几行代码。
如果做不到这一点,是的,我可能会寻找另一个路由库。也许试试 GluePHP?
它是一个文件,几乎零依赖。你不会得到流行的 Sinatra 风格的基于闭包的路由。相反,您为每条路线创建一个非常简单的类。不知道这对你来说是否可以协商。但它很小而且独立。
Slim Framework 也可能是一种选择:
它们提供 Composer 和非 Composer 安装方法。非 Composer 方法使用自己的自动加载器。不错的方法,但我不确定是否符合您的标准。
如果您不想使用作曲家加载,您可能想看看另一个库......
我目前正在开发一个针对极高性能的 php 路由器。并且没有额外的依赖。你可能想看看:
供参考:
Pux 在静态路由调度方面比 symfony 路由器快 48.5 倍,在正则表达式调度方面快 31 倍。(安装了 pux 扩展)
Pux 尽量不消耗计算时间来动态构建所有路由(如 Symfony/Routing)。相反,Pux 将您的路由编译为普通的 PHP 数组进行缓存,编译后的路由可以非常快速地从缓存中加载。
借助 Pux PHP 扩展支持,您可以比纯 PHP Pux 快 1.5~2 倍地加载和调度路由。