有代码示例吗?这是我得到的:
// index.php
require_once __DIR__ . '/Klein/Klein.php';
$klein = new \Klein\Klein();
$klein->respond(function () {
return 'All the things';
});
在 PHP 5.3 上,这会返回错误( fatal error :找不到类“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
但是,代码具有内部依赖关系,需要自动加载器来实现。这些文件将被包含在上面的循环中,但不是按照所需的顺序。因此,在运行循环之前,我手动包含了上面的两个异常接口(interface)。它有点脆弱,因为开发人员可以随时重新排列这些依赖项,但它确实有效。
更正确的答案是使用自动加载器。我不知道你为什么不喜欢 Composer 的自动加载器,但它非常漂亮且易于使用。自动加载的内容会被缓存,因此不会真正影响性能。您可以独立于包管理器使用自动加载器。除了将composer.json 和vendors/目录放置在项目根目录中之外,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 - 在没有 Composer 的情况下使用 klein.php?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20915003/