drupal_retrieve_form 大致是如何运行的?

函数原型是这样的

function drupal_retrieve_form($form_id, &$form_state) {
//--
}

1 把$form_id传到$form_state[‘build_info‘][‘form_id‘]

$form_state[‘build_info‘][‘form_id‘] = $form_id;

2 如果$router_item有include某个文件, 就加载之

 if (!isset($form_state[‘build_info‘][‘files‘][‘menu‘]) && !defined(‘MAINTENANCE_MODE‘)) {
    $item = menu_get_item();
    if (!empty($item[‘include_file‘])) {
      // Do not use form_load_include() here, as the file is already loaded.
      // Anyway, form_get_cache() is able to handle filepaths too.
      $form_state[‘build_info‘][‘files‘][‘menu‘] = $item[‘include_file‘];
    }
  }

3 把$args提出来

$args = $form_state[‘build_info‘][‘args‘];

4 形成一个新的$args

 $args = array_merge(array($form, &$form_state), $args);

我所看到的就是形成了一个新的array
0-0   --- $form
1-form state array  --- $from_state
2-extra array or object   --- $object

5  让form_id这个函数去运行, 并传入$args

  $form = call_user_func_array(isset($callback) ? $callback : $form_id, $args);

6 把form_id这个值挂到$form, 然后返回$form

 $form[‘#form_id‘] = $form_id;
 return $form;
时间: 2024-11-29 09:26:25

drupal_retrieve_form 大致是如何运行的?的相关文章

drupal_build_form 大致是如何运行的呢 ?

函数原型 function drupal_build_form($form_id, &$form_state) { //--- } 1 填充$form_state $form_state += form_state_defaults(); 2 填充$form_state['input'] if (!isset($form_state['input'])) { $form_state['input'] = $form_state['method'] == 'get' ? $_GET : $_POS

menu_execute_active_handler大致是如何运行的?

1, 首先判断网站是正常运行还是处于维护模式 $page_callback_result = _menu_site_is_offline() ? MENU_SITE_OFFLINE : MENU_SITE_ONLINE; 2, 获得$_GET['q']的值, 并给其他模块改变站点状态留一个接口 $read_only_path = !empty($path) ? $path : $_GET['q']; drupal_alter('menu_site_status', $page_callback_

drupal_get_form 大致是如何运行的?

一般drupal_get_form这个函数是被定义在hook_menu的page callback function hook_menu(){ //.... } 1 跳转到drupal_get_form函数,其原型是这样子的 function drupal_get_form($form_id) { //... } 2. 获得page arguments, 去掉第一个参数, 然后把剩下的参数放到$form_start['buld_info']['args']下面 $args = func_get_

算法录 之 复杂度分析。

一个算法的复杂度可以说也就是一个算法的效率,一般来说分为时间复杂度和空间复杂度... 注意接下来说的均是比较YY的,适用与ACM等不需严格分析只需要大致范围的地方,至于严格的算法复杂度分析的那些数学证明,主定理什么的在<算法导论>这本书上有十分详细的讲解,网上应该也会有人写过,这里就不多说了(其实,是我不会而已o(╯□╰)o...). — 到底啥是复杂度呢?先来个栗子. 小明有10个苹果,有一天他饿了,然后准备吃掉一个苹果,但是小明有中二病,他要吃里面重量最大的那个,于是...他需要一个找到那

linux笔记1

磁盘的第一个扇区(512字节)由mbr和分割表组成,分割表记录开始磁柱开始和结束号 ctrl+c和ctrl+\中断程序,ctrl+d为EOF,ctrl+z把前台的程序转为后台,并暂停执行.命令后加&,把程序转到后台执行(思考:如果程序本身也使用标准输入,那么bash的标准输入会和程序冲突.).bg,fg命令可以把程序前后台切换 man的使用格式:man 3 foo,man -f foo,man -k foo enbale列出一个命令是不是外部,还是内部命令 who,netstat -antp,p

Chrome development tools学习笔记(2)

利用DevTools Elements工具来调试页面DOM Elements工具是Chrome DevTools界面的第一个标签,如今很多网页都通过JavaScript来动态的修改DOM以及CSS,传统的查看HTML和CSS源代码来调试页面,无法看到那些动态的内容,一遍一遍的刷新页面查看修改HTML和CSS的效果对于开发来说效率也很低下.Elements工具就是一个可以帮助我们实时的查看和编辑DOM树以及CSS样式的工具. 打开DevTools切换到Elements标签就可以看到Elements

第五次毕业设计任务书(4.2--4.9)

一.计划进度 时间 内容 4.9-4.15 开始写毕业论文,继续编写毕设代码. 4.16-4.22 大致程序可以运行. 4.23-4.29 继续编写毕设程序,修改细节部分,完成毕业论文初稿. 4.30-4.29 完善毕业论文和毕业设计 4.30-5.6 完善毕业设计和论文 5.6-5.12 毕业论文定稿和准备答辩 二.本周研究内容. Apriori算法 def createC1( dataSet ): ''''' 构建初始候选项集的列表,即所有候选项集只包含一个元素, C1是大小为1的所有候选项

Android动态方式破解apk前奏篇(Eclipse动态调试smail源码)

一.前言 今天我们开始apk破解的另外一种方式:动态代码调试破解,之前其实已经在一篇文章中说到如何破解apk了: Android中使用静态方式破解Apk  主要采用的是静态方式,步骤也很简单,首先使用apktool来反编译apk,得到smail源码,然后分析smail代码,采用代码注入技术来跟踪代码,然后找到关键方法进行修改,进而破解,同时还可以使用一些开源的hook框架,比如:Xposed和Cydia Substrate,来进行关键方法的hook.所以这里我们可以看到我们破解的第一步是使用ap

权威详解 | 阿里新一代实时计算引擎 Blink,每秒支持数十亿次计算

王峰,淘宝花名"莫问",2006年毕业后即加入阿里巴巴集团,长期从事搜索和大数据基础技术研发工作,目前在计算平台事业部,负责实时计算北京研发团队. 在阿里巴巴的11年工作期间,持续专注大数据计算与存储技术领域,基于Hadoop开源生态打造的数据基础设施一直服务于搜索.推荐等阿里核心电商业务场景,最近一年带领团队对Apache Flink进行了大量架构改进.功能完善和性能提升,打造出了阿里新一代实时计算引擎: Blink.目前数千台规模的Blink生产集群已经开始在线支持搜索.推荐.广告