在没有作曲家的情况下使用 klein.php? [关闭]

Posted

技术标签:

【中文标题】在没有作曲家的情况下使用 klein.php? [关闭]【英文标题】:Using klein.php without composer? [closed] 【发布时间】:2014-01-21 19:02:03 【问题描述】:

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

// index.php

require_once __DIR__ . '/Klein/Klein.php';

$klein = new \Klein\Klein();

$klein->respond(function () 
    return 'All the things';
);

在 PHP 5.3 上,这会返回一个错误(致命错误:未找到 Class 'Klein\ServiceProvider')。

【问题讨论】:

【参考方案1】:

如果你不想用 composer 加载,你可能想看看另一个库...

我目前正在开发一个针对超高性能的 php 路由器。并且没有额外的依赖。你可能想看看:

https://github.com/c9s/Pux

仅供参考:

Pux 在静态路由调度方面比 symfony 路由器快 48.5 倍, 正则表达式调度速度提高 31 倍。 (带有 pux 扩展名 已安装)

Pux 尽量不消耗计算时间来构建所有路由 动态(如 Symfony/Routing)。相反,Pux 编译您的路线 到普通的 PHP 数组进行缓存,编译的路由可以从 缓存非常快。

借助 Pux PHP 扩展支持,您可以加载和调度路由 比纯 PHP Pux 快 1.5~2 倍。

【讨论】:

【参考方案2】:

好的,我整理了一些似乎可以工作的代码。不能说我推荐它,但它加载 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://***.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://***.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 方法使用自己的自动加载器。不错的方法,但我不确定是否符合您的标准。

【讨论】:

遇到了另一个自动加载生成器,您可能可以用它来实现没有 Composer 的自动加载:github.com/theseer/Autoload

以上是关于在没有作曲家的情况下使用 klein.php? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Laravel,如何在没有作曲家的情况下手动安装包

如何在没有作曲家的情况下包含 phpspreadsheet 库?

如何在没有作曲家的情况下使用PHP库(FPDI与FPDI保护)

如何在没有Symfony 4中的DoctrineBundle的情况下将DBAL Doctrine连接注册为服务

服务器作曲家安装 --no-dev 被杀

使用 REST api 执行 PayPal 付款