如何判断class方法是否存在
How to determine if a class method exists
我正在将一些 Drupal 7 代码移植到 8,但遇到了一件事。在 D7 中,我构建了一些带有特殊挂钩函数的自定义模块,可以提供一些调试信息。要获得它们的列表,我可以调用 module_implements('debugInfo')。对于 D8,我想搜索,从 modules/custom 目录开始,return 具有 class 的模块列表,其中 public 成员函数名为 'debugInfo'.有没有办法做到这一点?我找到了一个例子,第一个答案在 PHP - get all class names inside a particular namespace,但是如果我有一个基础 class 和我正在寻找的方法,它还会报告所有子 classes 继承基础 class.
因为我只关心我的自定义模块,所以我不能使用 composer 来做这件事。我想要的是一种从起始目录获取已实现 classes 的字典,并从 classes.
获取可用方法列表的方法
听起来您可能想要一个自定义插件管理器。
在 Drupal 8(和现在的 9)中,您可以创建一个插件管理器服务,然后在每个模块中实现插件,以便在需要时调用信息,而不是实现自定义挂钩和搜索。管理器服务会自动发现插件,您可以根据需要调用它们。
创建插件比自定义挂钩要多一些工作,但也更灵活,并为您提供了选择。这些资源可以帮助您解决细节问题:
- https://www.drupal.org/docs/drupal-apis/plugin-api/creating-your-own-plugin-manager
- https://spinningcode.org/2017/01/drupal-8-plugins-are-addictive/
- https://medium.com/@uditrawat/custom-plugin-type-in-drupal-8-5c243b4ed152
为了帮助您走捷径,您正在阅读一些内容:从带注释的插件开始。
我正在将一些 Drupal 7 代码移植到 8,但遇到了一件事。在 D7 中,我构建了一些带有特殊挂钩函数的自定义模块,可以提供一些调试信息。要获得它们的列表,我可以调用 module_implements('debugInfo')。对于 D8,我想搜索,从 modules/custom 目录开始,return 具有 class 的模块列表,其中 public 成员函数名为 'debugInfo'.有没有办法做到这一点?我找到了一个例子,第一个答案在 PHP - get all class names inside a particular namespace,但是如果我有一个基础 class 和我正在寻找的方法,它还会报告所有子 classes 继承基础 class.
因为我只关心我的自定义模块,所以我不能使用 composer 来做这件事。我想要的是一种从起始目录获取已实现 classes 的字典,并从 classes.
获取可用方法列表的方法听起来您可能想要一个自定义插件管理器。
在 Drupal 8(和现在的 9)中,您可以创建一个插件管理器服务,然后在每个模块中实现插件,以便在需要时调用信息,而不是实现自定义挂钩和搜索。管理器服务会自动发现插件,您可以根据需要调用它们。
创建插件比自定义挂钩要多一些工作,但也更灵活,并为您提供了选择。这些资源可以帮助您解决细节问题:
- https://www.drupal.org/docs/drupal-apis/plugin-api/creating-your-own-plugin-manager
- https://spinningcode.org/2017/01/drupal-8-plugins-are-addictive/
- https://medium.com/@uditrawat/custom-plugin-type-in-drupal-8-5c243b4ed152
为了帮助您走捷径,您正在阅读一些内容:从带注释的插件开始。