【问题标题】:Drupal 7 Form API run function on form submitDrupal 7 Form API 在表单提交时运行函数
【发布时间】:2013-03-11 02:33:16
【问题描述】:

我创建了一个自定义模块,我需要在填写并提交表单时收集信息并运行一个函数。

它有两个文本区域和一个按钮。

这就是我所拥有的,在页面上显示得很好:

文件:myFunction.admin.inc

function myFunction_form($form)
{

    $form['pages'] = array(
    '#type' => 'fieldset',
    '#title' => t('Data'),
    '#collapsible' => FALSE,
    '#collapsed' => FALSE,
  );

    $form['pages']['title'] = array(
    '#type'          => 'textarea',
    '#title'         => t('Title'),
    '#rows'          => 5,
    '#resizable'    => FALSE,
  );

  $form['pages']['body'] = array(
    '#type'          => 'text_format',
    '#title'         => t('Body'),
    '#rows'          => 5,
    '#resizable'    => FALSE,
    '#format' => 'full_html',
  );

  $form['submit'] = array('#type' => 'submit', '#value' => t('Run Function'));

    myFunction($form);
    return $form;

}

function myFunction()
{
//This is where I use the data collected from my form and do what I need to do.
}

所以我在这个表单中遗漏的东西(如果我做错了,请告诉我)是我需要验证表单是否已填写,如果没有则返回错误消息。

如果表单已填写,则正确地将字段数据传递给我的函数,我只需在 return $form; 之前添加 function myFunction() 即可,但这似乎是错误的做法。如果表单存在错误,我不希望 myFunction() 运行。

有人可以帮我完成我的自定义模块的最后一部分吗?

请注意此模块不会向数据库添加任何内容。

再一次,如果我在这件事上走错路了,请告诉我。

【问题讨论】:

    标签: drupal-7 drupal-forms


    【解决方案1】:

    您应该遵循表单 API 使用的标准命名结构。如果你的功能是:

    myFunction_form(),

    然后

    myFunction_form_validate() 将在提交以执行任何验证时被调用。如果一切顺利,那么

    myFunction_form_submit() 将被调用。您应该将提交逻辑(或对自定义函数的调用)放在提交中。

    这是设置 $form['#submit'][] 和 $form['#validate'][] 的首选行为。

    有关其工作原理的简单示例,请参阅Examples Module

    【讨论】:

      【解决方案2】:

      是的,你可能走错路了。 您必须添加自定义验证器并提交函数,例如

      <?php
      
      $form['#submit'][] = my_submit_callback
      $form['#validate'][] = my_validator_callback
      
      
      function my_submit_callback($form, &$form_state) {
        // form_state array contains the submitted values
      }
      function my_validator_callback($form, &$form_state) {
        // form_state array contains the submitted values
        if ($form_state['values']['body'] == '') {
         form_set_error(...)
      }
      }
      

      当然还要从 form_builder 函数中删除 myFunction() 调用

      【讨论】:

        【解决方案3】:

        以这种方式接近它:

        $form['#validate'][] = 'myCustomValidateFunction';
        $form['#submit'][]   = 'myCustomSubmitFunction';
        
        function myCustomValidateFunction($form, &$form_state) { 
          \\if validation was not passed use form_set_error()
        }
        
        function myCustomSubmitFunction($form, &$form_state) { 
           //submit logic, $form_state includes the values
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-10-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多