在drupal形式api中使用"#process"回调有什么用?

Nic*_*k.h 6 drupal

在drupal fapi中有一个属性"#process".它到底是什么?为什么密码字段使用它进行字段复制而不是添加主题?
我想用它来定义一个带有hook_elements的新字段类型.

编辑:
这是我的hook_elements:

function test_elemets() {  
    return array(
        'test_field' => array(  
            '#input' => TRUE,  
            '#process' => array('test_field_process'),
        )
    );
}
Run Code Online (Sandbox Code Playgroud)

和进程回调:

function test_field_process($element, $edit, &$form_state, $complete_form) {
    $element = array();    
    return $element;    
}
Run Code Online (Sandbox Code Playgroud)

正如您在进程函数中看到的那样,我使用$ element = array()来查看会发生什么.但是表单显示为之前.为什么?

Hen*_*pel 11

阅读'#process'表单元素属性上的Forms API文档.

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

如果要提供复杂的表单元素(例如,组合多个"标准"元素,或者自动添加标准JavaScript帮助程序),您将需要使用它,但仍保留Forms API的简单声明方法.(看看Ma - 只有一个'#type' = 'myCrazyFormElement'数组,将'自动'扩展为更复杂的东西 ;)

通过主题化层这样做也许是可能的,这取决于使用情况,但需要更多的代码,每次你需要它.