我想将几个库移至 Composer/Packagist,并且正在努力处理 php 命名空间映射。
composer.json
包含(但不确定这是否正确) "autoload": {
"psr-4": {
"Theking2\\Csp\\": "src/"
}
},
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" }
},
相同的结果。这些文件位于
src/Csp
直接位于 vendor/Theking2/csp-builder
创建的文件夹 compose update
下。
就在有人问之前:是的,每个文件中都有一个
namespace Csp;
。
使用
composer init
时需要考虑一些事项。第一个问题(<vendor><name>
)定义了很多内容,默认为登录的用户(?)以及她正在使用的文件夹。当然,这可以更改,但需要提前一些思考。因此请一步一步来。
让我们假设这些先决条件:
实体 | 价值 |
---|---|
供应商 | 金山软件 |
正在开发的包 | csp 构建器 |
开发者/登录用户 | 开玩笑 |
github用户开发 | 国王2 |
Packagist 名称 | 金山软件 |
PHP 命名空间 | 金山\Csp |
源根 | 来源/ |
让我们假设该包不依赖于任何东西并且具有 MIT 许可证,所有这些都不相关。
composer init
第一个问题的答案必须更改
kingsoft/csp-builder
。第 9 个问题(PSR-4 自动加载映射)的答案可以回答是,但我们必须稍后更改该答案的效果。生成后,观察最后几行:
Generating autoload files
Generated autoload files
PSR-4 autoloading configured. Use "namespace Kingsoft\CspBuilder;" in src/
Include the Composer autoloader with: require 'vendor/autoload.php';
对命名空间的猜测很好,但我们想将其更改为
Kingsoft\Csp
。在生成的composer.json
中执行此操作
"autoload": {
"psr-4": {
"Kingsoft\\Csp\\": "src/"
}
},
现在假设文件夹
src/
中的源文件以及直接位于其中的源文件具有
namespace Kingsoft\Csp;
接近顶部。 (可能就在
<?php declare(strict_types=1);
之后。)
现在提交此内容并将其与您使用的任何 git 提供商上的存储库同步。也许在那之前标记它:
git tag 1.0.0
在 Packagist 上,在帐户
csp-builder
下设置一个新包 (kingsoft
),并在将 Packagist 帐户与 GitHub 帐户连接后将相关挂钩添加到例如 GitHub。 (不知道如何在其他 git 托管商上做到这一点,请在评论中留言)。
在设置过程中不涉及代码的小更改(拼写错误等)可能需要提交并重新标记
git tag 1.0.1 --force && git push -f --tags
当然,稍后在代码更改后,您可能(必须)向新版本添加标签。
这就是大部分工作。现在到..
这很容易。使用最少的内容创建一个
composer.json
:
{
"require": {
"kingsoft/csp-builder": "*"
}
}
并在终端中输入此内容
composer update
并使用
Kingsoft\Csp
中包含的任何内容。喜欢
$csp = new Kingsoft\Csp\Builder(true);
$csp-> setCspHeader();
或者通过导入命名空间来稍微缩短导入的名称:
use Kingsoft\Csp;
,并在类名等上省略供应商名称(但要包含命名空间Csp\
!),如new Csp\Builder(true);
。
我正在写这个相当详尽的答案,以供我自己将来参考。