编程语言
首页 > 编程语言> > php – Drupal的模块挂钩呼叫在哪里开始?

php – Drupal的模块挂钩呼叫在哪里开始?

作者:互联网

在Drupal 7(和Drupal 6?)系统中,什么“开始”钩子调用过程,或“顶级”钩子调用位于何处?

正如我目前了解Drupal模块系统,任何模块都能够为另一个模块创建一个钩子来实现.这意味着Drupal的大部分执行都是为其他模块实现钩子的模块,这反过来又为其他模块提供了钩子来实现.

我不清楚的是,是否有一个初始的顶级钩子在引导程序中调用以启动此过程,或者是否有几个非模块调用启动钩子调用过程,或其他什么(道歉)这是模糊和新的,但就像我说我不明白)

我查看了_drupal_bootstrap_full函数,最后有一个很有希望

module_invoke_all('init');

但是,我对modules /文件夹的搜索只显示了一个“init”钩子函数,这似乎不是一个启动点

system/system.api.php
1737:function hook_init() {

function hook_init() {
  drupal_add_css(drupal_get_path('module', 'book') . '/book.css');
}

所以,那对我来说,模块系统之外的东西会把这一切都搞砸.这是发生在一个地方,还是多个地方.这些地方在哪里?

我目前不是一个沉重的Drupal用户.我所有这一切的最终目标是孤立地理解Drupal的模块系统,这样我就可以调查并理解Drupal如何使用它的模块构建大多数人认为是Drupal的应用程序.欢迎任何/所有解释,但我试图从架构的角度理解事物.我知道你不需要这些知识来使用Drupal,但是我的大脑已经坏了,在我知道基本的PHP代码在做什么之前我不会让我前进.

解决方法:

钩子系统是Drupal内部的一个独立系统.它不负责引导. hook_init()只是在引导过程结束时调用的钩子.正如另一个答案所说,module_invoke_all()可以在进程中随时随地调用.

简而言之,在Drupal 7中,index.php中的以下两行负责请求的基本流程:

<?php
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
menu_execute_active_handler();
?>

哪个可以翻译成两个步骤:

>引导系统.这包括加载所有模块和必要的包含文件,数据库连接等.
>查找负责此请求的菜单路由器项并执行它.

有人开始发布一系列博客文章来详细描述它,见http://becircle.com/blog_topics/line_line.

标签:php,drupal,drupal-modules,drupal-hooks
来源: https://codeday.me/bug/20190621/1255956.html