编辑重要说明:我要包含的软件包不使用作曲家自动加载。我必须使用他们的骇客,我想避免。
我知道作曲家主要是如何工作的,我有一个可以是依赖项的软件包(这很重要,我知道如何在一个项目中将这项工作做到,但这不是我要问的(。
我需要什么?
-
有人需要我的包裹
作曲家需要tomas/my-package
-
它将安装
-
它将使用PSR-4
自动加载我的包装 它将自动加载第三方软件包以及
我已经尝试了这样的事情:
"autoload": {
"psr-4": {
"MyPackage\": "src",
"PHP_CodeSniffer\": "../../squizlabs/php_codesniffer/src"
}
}
我在我的一个依赖项中尝试过,它不起作用:(。
另外,我已经与包装作者进行了交谈,他不想使用作曲家自动加载。他更喜欢自己的。
感谢您的任何帮助!
如果这些答案与我解决的问题有关,则没有,所以我尝试发布最佳解决方案到目前为止 我在Phpstan中受到了启发,该phpstan对自动加载目录的心情受到了启发,这些目录在作曲家中被错过(实际上是同一问题(。 我已经添加了Robotloader : 然后使用静态方法创建 ,我在需要时称其为: 工作就像魅力。但仍开放到更好的解决方案 1! github永久链接composer require nette/robot-loader
LegacyCompatibility
类:use NetteLoadersRobotLoader;
// ...
public static function autoloadCodeSniffer(): void
{
$robotLoader = new RobotLoader;
$robotLoader->acceptFiles = '*.php';
$robotLoader->setTempDirectory(sys_get_temp_dir() . '/_robot_loader');
$robotLoader->addDirectory(getcwd() . '/vendor/squizlabs/php_codesniffer/src');
$robotLoader->register();
}
LegacyCompatibility::autoloadCodeSniffer()
您在 composer.json
文件中做一个大型禁忌:您正在定义不在软件包中的代码的自动加载。
这将失败,正如您已经发现的那样。
,我想知道您为什么要努力集成PHP代码网络,因为该软件包具有工作自动加载定义。您需要做的就是"require": { "squizlabs/php_codesniffer": "^3.0@RC" }
(如果您真的需要最新的3.x版本候选者,否则^2.8.0
将是一个更好的主意(。
如果您需要php_codesniffer,而不是以某种方式在自动加载中引用它,则作曲家将尽一切努力集成该软件包:下载它,将其添加到自动加载器中,并在必要时运行它的代码。任何根据您的包裹的人也将安装此依赖。
您唯一的问题是"它不起作用" ,这是对问题的充分描述,因为您缺乏描述您在代码中所做的事情,以及您收到的错误消息。还要说明您期望发生的事情,以及发生的事情(以及如果这不明显的话,这如何偏离您的期望(。