You are here

使用$form_state传递数据

一个更简单一点的方式是使用$form_state存储该值。由于$form_state在验证和提交函数中都是通过引用传递的,所以在验证函数中,可以将数值存储在这里,而在提交函数中,就可以使用它了。最好在$form_state中加上你模块的命名空间,而不是仅仅使用一个键。

 
// Lots of work here to generate $weather_data from slow web service
// as part of validation.
...
// Now save our work in $form_state.
$form_state['mymodulename']['weather'] = $weather_data
 
    接着,你就可以在你的提交函数中访问该数据了:
// Instead of repeating the work we did in the validation function,
// we can just use the data that we stored.
$weather_data = $form_state['mymodulename']['weather'];
 

    你可能会问,“为什么不把该值存储在$form_state['values']中,这样不就和表单字段值保持一致了吗?”你说的这种方式也能工作,但是要记住,$form_state['values']是用来放置表单字段值的,而不是放置模块存储的随机数据。还记不记得,Drupal允许任意的模块将验证和提交函数附加在任意的表单上,因此你不能假定只有你的模块使用了表单状态,所以应该采用一种兼容的可预期的方式来存储数据。

老葛的Drupal培训班 Think in Drupal

Drupal版本: