我想把几个库移到Composer/Packagist,并且正在努力解决php命名空间Map问题。
- 类文件在/src下的文件夹Csp中。它们有一个PHP命名空间Csp。
- compose init生成的
composer.json
包含(不确定是否正确)
"autoload": {
"psr-4": {
"Theking2\\Csp\\": "src/"
}
},
- 该软件包已在Packagist
https://packagist.org/packages/theking2/
上注册 - 在一个测试项目,我需要的包
- 在
index.php
中,我按照文档
require_once __DIR__ . '/vendor/autoload.php';
- 和
$csp = new Csp\Builder(true);
但是我得到了一个类找不到的错误。
在composer.json
中编辑:
"autoload": {
"psr-4": { "Csp\\": "src/Csp" }
},
或者这个
"autoload": {
"psr-0": { "Csp\\": "src/Csp" }
},
相同的结果。这些文件位于vendor/Theking2/csp-builder
下的文件夹src/Csp
中,因为compose update
创建了它。
在有人问之前:是的,每个文件中都有一个namespace Csp;
。
1条答案
按热度按时间vyswwuz21#
使用
composer init
时需要考虑几件事。第一个问题(<vendor><name>
)定义了很多内容,默认为用户登录的位置(?)以及她正在工作的文件夹。当然,这可以改变,但需要提前考虑。因此,请一步一步地进行。设置包
我们想要的
让我们假设这些先决条件:
| 实体|价值|
| --------------|--------------|
| 卖主|金山|
| 开发中的软件包|csp-builder|
| 开发人员/登录用户|开玩笑|
| github用户开发|国王2|
| Package 商名称|金山|
| PHP命名空间|金山词霸\CSP|
| 源根|源代码/|
让我们假设这个包不依赖于任何东西,并且有一个MIT许可证,所有这些都不相关。
一起作曲吧!
composer init
的第一个问题的答案必须更改为kingsoft/csp-builder
。第9个问题(PSR-4自动加载Map)的答案可以回答是肯定的,但我们必须稍后更改该答案的效果。生成后,观察最后几行:自动加载器调整
这是一个很好的猜测,但我们希望将名称空间更改为
Kingsoft\Csp
。现在假设文件夹
src/
中的源文件和直接位于其中的源文件具有靠近顶部。(可能直接在
<?php declare(strict_types=1);
之后。)提交推流
现在提交这个代码,并将其与你使用的任何git提供程序上的repo同步。也许在此之前标记它:
打包员
在Packagist上,在账户
kingsoft
下设置一个新的包(csp-builder
),并在将Packagist账户与GitHub账户连接后将相关的钩子添加到例如GitHub。(不知道如何在其他git主机上这样做,请在评论中留言)。在安装过程中不涉及代码的小更改(错别字等)可能需要提交并重新标记
当然,在代码更改之后,您可能(必须)向新版本添加标记。
这是大部分的工作。现在..
使用包
这很简单。创建一个
composer.json
,其中包含以下最少的内容:在终端里输入这个
并使用
Kingsoft\Csp
中包含的任何内容。例如或者通过导入命名空间来缩短导入的名称:
use Kingsoft\Csp;
,并在类名等中省略供应商名称(但要包括命名空间Csp\
!),如new Csp\Builder(true);
。我写这个相当详尽的答案是为了我自己将来的参考。