在没有作曲家的情况下使用 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? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有作曲家的情况下包含 phpspreadsheet 库?
如何在没有作曲家的情况下使用PHP库(FPDI与FPDI保护)