我正在寻找一种方法来获取应用程序中已安装的作曲家模块的列表。是否可以使用类似\Composer->getModules()
的东西?我还想从composer.json文件中获取其他值,例如包的类型和事物。我要实现的目标是将composer包含在框架中,并使应用程序自动知道它们在那里而无需任何其他安装。
答案 0 :(得分:0)
您可以使用一些迭代器来获取作曲家=ARRAYFORMULA({"";"days since";IFERROR(IF(V4:V*1<>0,DATEDIF(V4:V,TODAY(),"D"),))})
软件包的列表。在项目的根目录(required
所在的目录)中创建一个文件,然后添加以下代码片段。这将查找vendor
目录或根目录中的所有composer.json
文件(而不是vendor
等其他目录中的文件):
src
输出与此类似:
function getComposerPackages() {
$directoryIterator = new RecursiveDirectoryIterator('./');
$regexIterator = new RegexIterator(
new RecursiveIteratorIterator($directoryIterator),
'~^.(.)(?:vendor\1.*)?composer\.json$~',
RecursiveRegexIterator::GET_MATCH
);
$requiredModules = [];
foreach ($regexIterator as $filePath) {
$jsonContent = file_get_contents($filePath[0]);
$jsonArray = json_decode($jsonContent, true);
if (isset($jsonArray['require'])) {
$requiredModules += $jsonArray['require'];
}
}
return $requiredModules;
}
print_r(getComposerPackages());
答案 1 :(得分:0)
我最终改编了@revo的答案
function getComposerPackages() {
$requiredModules = [];
foreach( glob("vendor/*/*/composer.json") as $filePath ) {
$jsonContent = file_get_contents($filePath);
$jsonArray = json_decode($jsonContent, true);
if (isset($jsonArray['require'])) {
$requiredModules += $jsonArray['require'];
}
}
return $requiredModules;
}
print_r(getComposerPackages());