【问题标题】:Calling Composer from php从 php 调用 Composer
【发布时间】:2013-10-10 09:59:26
【问题描述】:

是否可以通过 \Composer\ 命名空间从应用程序代码中调用 composer update 以获取有关 udpates 的信息?

我在 google 中搜索过,仅找到有关 Composer 插件或编写 (post|pre)-(install|update) 挂钩脚本的信息,但没有找到任何有关获取此类信息的信息。

已解决: 将自定义作曲家脚本放入pre-update-cmd

getComposer();

        $installedRepo = $composer->getRepositoryManager()->getLocalRepository();

        $dm = $composer->getDownloadManager();
        $im = $composer->getInstallationManager();

        $errors = 数组();

        /* 列出包 */
        foreach ($installedRepo->getPackages() as $package) {
            $downloader = $dm->getDownloaderForInstalledPackage($package);

            if ($downloader instanceof ChangeReportInterface) {
                $targetDir = $im->getInstallPath($package);

                if ($changes = $downloader->getLocalChanges($package, $targetDir)) {
                    $errors[$targetDir] = $changes;
                }
            }
        }

        如果(!$错误){
            $status['changes'] = null;
        } 别的 {
            $status['changes'] = $errors;
        }

        // 在 $status['changes'] 我们有所有待处理的更新
    }
}


【问题讨论】:

标签: php composer-php


【解决方案1】:

你试过命令exec("php composer.phar update")exec description吗?

讨论后更新:
代码composer.phar/src/Composer/Command/StatusCommand.php [lines 43-92] 的答案 - 它可用于检查存储库的更新

【讨论】:

  • 你错过了我的问题,我不想以某种方式调用 Compsoer 类创建作曲家的实例,然后运行更新来获取更新信息。我不会解析 exec('php composer.phar update'),cli ansi 输出是针对人类的,解析它是我最不想做的事情。
  • 好的。另一个想法:尝试提取 composer.phar 并获取源代码(我发现了这个函数php.net/manual/en/phar.extractto.php 或者你可以直接从 PhpStorm 访问文件)。然后你会看到逻辑并为你的目的更正它
  • 是的,我可以在包“composer/composer”的代码中看到逻辑。我发现有可能通过 (post|pre)-(install|update)-cmd 脚本获取作曲家实例、存储库管理器、包和安装管理器,但还没有找到如何使用它们来获取有关信息待更新。
  • 查看文件:composer.phar/src/Composer/Command/StatusCommand.php [lines 43-92]。我认为这是您需要的代码。
猜你喜欢
  • 1970-01-01
  • 2021-06-05
  • 2013-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-04
  • 2013-06-28
  • 1970-01-01
相关资源
最近更新 更多