Drupal如何通过模块处理课程自动加载?例如,如果我有一个事件模块,并且我声明了一个名为“事件”的类,然后在.info文件中我包括类文件,则该注册是如何注册的?

问题是我试图动态地获取包含所有已加载类名称的数组。 get_declared_classes() 不会以这种方式返回我所有的班级的名称,因此我假设它们以某种方式自动加载。遵循另一个堆栈溢出问题的建议,我尝试将它们全部与 spl_autoload_functions(), ,但这也没有成功。

有任何想法吗?

有帮助吗?

解决方案

重建模块时,在.info文件中列出的所有文件均已解析(出于绩效原因,该列表中仅更改/新文件)。

然后将这些信息存储在 {registry}{registry_files} 表。因此,如果您想根据给定的命名模式获得所有课程或这些课程,则可以查询这些表。

其他提示

Drupal维护代码注册表并将其用于其类自动加载器。要使用模块的类填充此注册表,您应该将它们的文件添加到.info文件中的文件[]条目:

files[] = includes/Foo.inc
files[] = includes/Bar.inc

PHP的类自动加载将确保还加载了父类文件。

归功于用户Pier-Buyle此答案,请参阅他的 原始答案在这里 对于同样的问题。

希望有帮助

spl_autoload_functions() 返回已注册的自动加载函数列表 spl_autoload_register(). 。 Drupal注册两个自动加载函数:一个用于类(drupal_autoload_class()),一个用于接口(drupal_autoload_interface()).

两个功能都使用 _Registry_check_code();使用其代码,您可以编写一个函数,该函数列出了Drupal 7模块实现的所有类。

如果您添加了.info文件的文件[]数组的条目,则必须转到模块管理部分,然后单击“保存配置”。这将使Drupal刷新.info信息,并将注册新条目。

我发现,在我开始运行模块时,在信息文件中宣布我的inclage文件不会使它们识别。如果我在file event.inc中有课堂活动。但是板条箱中的对象在模块中没有识别。我添加行

include_once ('CMatArticleHandler.inc');

在$ variable = new Event()之前;线。我是新手,所以它可能还有更多,但是它已经运作了。

许可以下: CC-BY-SA归因
scroll top