我有一个简单的表单,在节点显示页面上有一个选择菜单。有没有一种简单的方法来验证我的回调函数中的表单?通过验证我并不意味着任何高级,只是为了检查表格数组中实际存在的值。例如,如果没有ajax,如果我的选择菜单有3个项目并且我添加第4个项目并尝试提交表单,drupal将会出现类似“非法选择”的错误,请联系管理员。
使用ajax,您创建的第4个项目将保存到数据库中。所以我必须编写像
这样的验证if ($select_item > 0 && $select_item <= 3) {
//insert into db
}
或者是否有更简单的方法来检查项目实际存在于表单数组中?我希望有没有ajax,drupal如果被操纵就不会提交表格。感谢。
修改 所以我在回调函数中基本上需要这个吗?
$form_state = array('storage' => NULL, 'submitted' => FALSE);
$form_build_id = $_POST['form_build_id'];
$form = form_get_cache($form_build_id, $form_state);
$args = $form['#parameters'];
$form_id = array_shift($args);
$form_state['post'] = $form['#post'] = $_POST;
$form['#programmed'] = $form['#redirect'] = FALSE;
drupal_process_form($form_id, $form, $form_state);
要获得$ _POST ['form_build_id'],我将其作为数据参数发送,是吗?我在哪里使用form_get_cache,看起来没有数据。有点迷失了。
答案 0 :(得分:0)
由于您已经在使用AJAX,为什么不写一些jQuery只允许表单提交,如果选择在合法选择列表中?这可以在你正在处理的自定义模块中完成(使用drupal_add_js())。
答案 1 :(得分:0)
它并不是特别“简单”,但标准的方法是使用Drupals Forms API进行回调提交 - 这样,您将获得在非js提交时发生的相同验证
看看Adding dynamic form elements using AHAH。虽然它与您的场景完全不匹配(他们在回调中重建表单以添加新元素,而不是保存数据),但处理工作流程的说明非常有帮助。
然后有几个模块试图以通用的方式提供AJAX表单提交 - 你可以检查他们的代码如何做(或者只是使用它们);
最后,有efforts to put better support this functionality into core in Drupal 7 - 相关的讨论也可能有所帮助。