作曲家包的模块化设计



我正在开发一个类似框架的应用程序,我希望人们能够为此开发模块。

模块通过向核心提供有关其功能的信息,向核心应用程序添加其他功能。示例包括允许访问 MySql 或文件系统或电子邮件的模块。

虽然模块可以提供任意多或少的额外功能,但有一个 Module 类用于包装所提供的功能,并且每个模块应至少提供一个要包含在应用程序中的类。

在作曲家生态系统中,是否有关于PHP模块注册方法的指南或良好实践。如果模块可以提供别名并描述它们所需的任何配置,这将非常有用。

澄清编辑

我有一个核心应用程序,我们称之为example-app

任何使用example-app的人都应该能够使用应用程序的模块化框架轻松引入新功能。

所以,假设我们有两个模块 example-module-1example-module-2 .应用在从命令行运行时需要知道这些模块的存在。

一切都应该由作曲家管理,因此您将需要核心应用程序以及您希望与之一起使用的任何模块。例如

"require" : {
  "php": ">=5.5.0",
  "example/example-app" : "^1.0",
  "example/example-module-1": "^1.0",
  "example/example-module-2": "^1.0"
},

我想知道的是,是否有一种方法可以让模块在安装时通知核心应用程序它们的存在。

我已经有一个导入的模块可以位于其中的模块接口,我只需要一种方法来让核心应用程序知道这些类在所有其他作曲家安装的依赖项中定义的位置(例如,我不想创建一个庞大的类列表并逐步完成每个类做instanceof)。

我目前唯一能想到做的就是提供一个额外的配套应用程序(类似于 bin/example-app-config ),每个模块都作为其作曲家脚本的一部分调用该应用程序。它可以使用 cli 参数来告诉核心应用程序模块类的调用以及它具有的任何其他要求。但是,这对我来说并不合适,因为它似乎不是独立于操作系统的。

(我正在研究这个话题,很久以前就发现了你的问题。看起来作曲家现在支持按类型枚举已安装的包,这可能有助于您实现所需的目标。请参阅:https://getcomposer.org/doc/07-runtime.md#knowing-which-packages-of-a-given-type-are-installed

相关内容

  • 没有找到相关文章

最新更新