函数原型是这样的

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

1 初始化一些变量

  $form['#type'] = 'form';$form_state['programmed'] = isset($form_state['programmed']) ? $form_state['programmed'] : FALSE;// Fix the form method, if it is 'get' in $form_state, but not in $form.if ($form_state['method'] == 'get' && !isset($form['#method'])) {$form['#method'] = 'get';}

2  form build id

  if (!isset($form['#build_id'])) {$form['#build_id'] = 'form-' . drupal_random_key();}$form['form_build_id'] = array('#type' => 'hidden','#value' => $form['#build_id'],'#id' => $form['#build_id'],'#name' => 'form_build_id',// Form processing and validation requires this value, so ensure the// submitted form value appears literally, regardless of custom #tree// and #parents being set elsewhere.'#parents' => array('form_build_id'),);

3 form token

$form['form_token'] = array('#id' => drupal_html_id('edit-' . $form_id . '-form-token'),'#type' => 'token','#default_value' => drupal_get_token($form['#token']),// Form processing and validation requires this value, so ensure the// submitted form value appears literally, regardless of custom #tree// and #parents being set elsewhere.'#parents' => array('form_token'),);

4 form id

  if (isset($form_id)) {$form['form_id'] = array('#type' => 'hidden','#value' => $form_id,'#id' => drupal_html_id("edit-$form_id"),// Form processing and validation requires this value, so ensure the// submitted form value appears literally, regardless of custom #tree// and #parents being set elsewhere.'#parents' => array('form_id'),);}

5 form['#id']

 if (!isset($form['#id'])) {$form['#id'] = drupal_html_id($form_id);}

6 action  + method   +  theme-wrapper

$form += element_info('form');

7 tree parents

$form += element_info('form');

8 validate | submit

 if (function_exists($form_id . '_validate')) {$form['#validate'][] = $form_id . '_validate';}

9 $form['#theme']

if (!isset($form['#theme'])) {$form['#theme'] = array($form_id);if (isset($form_state['build_info']['base_form_id'])) {$form['#theme'][] = $form_state['build_info']['base_form_id'];}}

10 为hook_form_alter做准备

  $hooks[] = 'form_' . $form_id;drupal_alter($hooks, $form, $form_state, $form_id);

转载于:https://www.cnblogs.com/qinqiu/p/4494237.html

drupal_prepare_form 大致是如何工作的 ?相关推荐

  1. 不知道路由器工作原理?没关系,来这看看!看不懂你捶我 | 原力计划

    作者 | 北海以北没有小王 头图 | CSDN付费下载自视觉中国 来源 | CSDN博客 路由器概述 首先我们先大致了解一下路由器的大致结构以及工作方式. 路由器体系结构 路由器体系结构如下图: 其中 ...

  2. 计算机宣传部职责,计算机系团总支宣传部第一学期工作总结

    计算机系团总支宣传部第一学期工作总结 宣传部作为院系对外交流的窗口,主要负责对我院的学生会活动的总体宣传及其他有学院关事项的宣传工作.下面是关于计算机系团总支宣传部第一学期工作总结的内容,欢迎阅读! ...

  3. 本科应届毕业生如何找工作?

    在知乎到看到这样一个问题"本科应届毕业生如何找工作?"看到答姐的回答很全面,分享给大家,希望找工作的同学面试顺利. 从秋招的时候老是被刷,到春招的时候拿offer拿到手软,并且工资 ...

  4. Redis源码分析:AOF策略与时间触发任务

    时间周期性任务与AOF策略 周期性任务在分析启动流程与服务端处理的过程的时候,描述过有关时间任务的处理过程,在Redis内部事件驱动的过程中,有通过时间来进行事件的触发与处理机制,本文会先分析一下主要 ...

  5. 图解|通用搜索引擎背后的技术点

    1. 写在前面 今天准备和盆友们一起学习下关于通用搜索引擎的一些技术点. 鉴于搜索引擎内容非常多,每一部分都够写好几篇文章的所以本文只是抛砖引玉,深入挖掘还得老铁们亲力亲为. 通过本文你将对通用搜索引 ...

  6. aspnetcore mvc 异常处理_深入探究ASP.NET Core异常处理中间件

    前言 全局异常处理是我们编程过程中不可或缺的重要环节.有了全局异常处理机制给我们带来了很多便捷,首先我们不用满屏幕处理程序可能出现的异常,其次我们可以对异常进行统一的处理,比如收集异常信息或者返回统一 ...

  7. 慌!年中总结完全没思路,这份安全汇报让你抄作业

    下个月各大公司就要进行年中总结了,大家有思路了吗? Pixabay | Peggy_Marco M公司的安全负责人马小陌已经开始准备材料了,尽可能完成一场符合各方面预期的汇报,搬好小板凳一起来学习一下 ...

  8. 独家 | 一文读懂随机森林的解释和实现(附python代码)

    作者:William Koehrsen 翻译:和中华 校对:李润嘉 本文约6000字,建议阅读15分钟. 本文从单棵决策树讲起,然后逐步解释了随机森林的工作原理,并使用sklearn中的随机森林对某个 ...

  9. 垂直AI初创企业 VS 横向AI初创企业:不同的产品路线选择

    AI初创企业主要分为两种风格,我们将在今天的文章中,对二者做出分析与展望. 当下,AI初创企业正在快速涌现.根据斯坦福大学AI指数报告数据,自2014年以来,已经有超过15798家AI初创拿到超过40 ...

最新文章

  1. Android 使用 ellipsize 实现文字横向移动效果(跑马灯效果)
  2. ARCGIS中某字段递增赋值
  3. python程序后台运行的实现
  4. local_irq_save和 local_irq_disable
  5. P7276-送给好友的礼物【dp】
  6. CompletableFuture详解~completeExpectionally
  7. python之---子类父类属性之间的关系
  8. LoadRunner 11 安装及破解
  9. mysql 管理工具 绿色_飘云MySQL管理工具(MySQL数据库管理助手)V1.1 最新版
  10. ZigBee-CC2530单片机 - 1路硬件PWM控制舵机角度(精度为1us)
  11. CNNIC:第35次中国互联网络发展状况统计报告
  12. OpenXML标签含义
  13. 【微信】微信授权获取openid
  14. ATSC制数字电视机顶盒研究
  15. 中国邮政国际挂号信网上查询
  16. Fate Decision剧本
  17. uniapp全局修改字体
  18. 如何避免扫码枪重复扫码
  19. U-BOOT启动流程详细分析[转]
  20. 十六.linux开发之Kernel移植——内核的配置和编译原理

热门文章

  1. Oracle location,oracle秘境探索之11g tablespace prellocation
  2. access集团和abm_abm展示硬核实力,ACCESS集团携8大国际品牌在进博会首秀!
  3. Spark之functions
  4. R语言︱噪声数据处理、数据分组——分箱法(离散化、等级化)
  5. .NetCore 利用反射处理RESTful的更新自动赋值
  6. 关于使用UIWebView加载HTTPS站点
  7. Javascript之旅——第十站:为什么都说闭包难理解呢?
  8. CentOS 6.5 Zabbix监.控系统功能及基本使用
  9. 如何写出兼容大部分浏览器的CSS 代码
  10. java 数组 存储_Java-将数组存储到内存或从内存上传到磁盘