php - 在没有 Composer 的情况下使用 klein.php?

标签 php routes klein-mvc

有代码示例吗?这是我得到的:

// 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?

http://gluephp.com/

它是一个单一文件,几乎为零依赖性。你不会得到流行的 Sinatra 风格的基于闭包的路由。相反,您为每条路线创建一个非常简单的类。不确定这对你来说是否可以协商。但它很小而且独立。

Slim Framework 也可能是一个选择:

http://www.slimframework.com/

他们提供 Composer 和非 Composer 安装方法。非 Composer 方法使用其自己的自动加载器。不错的方法,但我不确定是否符合您的标准。

关于php - 在没有 Composer 的情况下使用 klein.php?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20915003/

相关文章:

javascript - jQuery.ajax 替换 PHP 代码

php - 将 UTC 偏移量转换为时区或日期

html - Angular 2 - 如何路由到新页面而不在新页面的 app.component.html 中显示 html

Python shell 在同一虚拟环境中同一台机器的不同位置上的工作方式不同

php - MySQL 返回列中存在值的所有行

php - 如何比较sql语句中的月份和年份?

Angular 2在路由时传递对象

ruby - 如何从 Sinatra 路由末尾删除 '/'

PHP路由: display flash messages in View (Klein)