什么';“的用法”#过程“;drupal表单api中的回调?

什么';“的用法”#过程“;drupal表单api中的回调?,drupal,Drupal,drupal fapi中有一个属性“#process”。它到底是什么?为什么密码字段使用它来复制字段,而不是将其与主题一起添加? 我想用它来定义一个带有hook_元素的新字段类型 编辑: 以下是我的hook_元素: function test_elemets() { return array( 'test_field' => array( '#input' => TRUE, '#process' =&

drupal fapi中有一个属性“#process”。它到底是什么?为什么密码字段使用它来复制字段,而不是将其与主题一起添加?
我想用它来定义一个带有hook_元素的新字段类型

编辑:
以下是我的hook_元素:

function test_elemets() {  
    return array(
        'test_field' => array(  
            '#input' => TRUE,  
            '#process' => array('test_field_process'),
        )
    );
}
和进程回调:

function test_field_process($element, $edit, &$form_state, $complete_form) {
    $element = array();    
    return $element;    
}
正如您在process function中看到的,我使用$element=array()来查看发生了什么。但是表单的显示方式与以前一样。为什么?

请阅读

它是一个回调函数数组,每个回调函数都将通过传递给它的元素定义数组进行调用。然后,回调函数可以作用于元素定义数组,将其转换为不同(通常更复杂)的定义,例如,在附加平等性检查JavaScript文件时复制密码字段,或将一个组合的“无线电”定义转换为相应数量的特定单“无线电”定义等

如果您想提供一个复杂的表单元素(例如,多个“标准”元素的组合,或一个自动添加标准JavaScript帮助程序的元素),但仍然保持表单API的简单、声明性方法,那么您将需要使用它。(看Ma-只有一个
'#type'='myCrazyFormElement'
数组,它“自动”扩展到更复杂的方式;)

通过主题层执行此操作可能是可能的,具体取决于用例,但每次需要时都需要更多代码。

表示:

调用的函数数组 当一个元素被处理时。使用 通过此回调,模块可以“注册” 进一步行动。例如 “收音机”窗体类型扩展为 多个单选按钮使用 处理功能

处理与主题化的不同之处在于保持在表单API中。您不能在主题层中更改表单数组(至少在D6中不能)。特别是密码,添加到#进程中。您可能会将其中的大部分内容混在主题层中,但这一行不行:

$element['#cache'] = TRUE;

因为缓存发生在主题层之前,所以不能在主题层中完成。更一般地说,虽然过程中发生的一些事情可能发生在主题层,但不可能全部发生在主题层,因为表单不仅仅是前端显示;它们也是后端处理。

谢谢。但是为什么模块提供元素而不将这些命令添加到钩子元素函数本身?例如,为什么在进程函数中写入$element['#cache']=TRUE而不是示例钩子元素?