3

我正在使用 Drupal FAPI 构建一个表单,并且有点复杂。我想要做的是放置一个按钮并在用户单击它时添加一些信息,因此我需要使用该按钮跳过验证。我正在尝试使用 #limit_validation_errors 属性,但似乎不起作用并且正在执行所有验证。

我注意到,当我将元素放在表单树的根级别时,它确实有效。这就是我所拥有的:

$form['application']['education']['add_education'] = array(
    '#type' => 'submit',
    '#value' => 'Add',
    '#submit' => array('_education_submit'),
    '#limit_validation_errors' => array(),
);

上面的代码不起作用,下面的代码虽然有效:

$form['add_education'] = array(
    '#type' => 'submit',
    '#value' => 'Add',
    '#submit' => array('_education_submit'),
    '#limit_validation_errors' => array(),
);
4

3 回答 3

2

看起来 Drupal 正在寻找 triggering_element 使用 value 属性进行比较;因为我有另一个具有相同值的按钮,所以系统会弄乱这些值并将另一个按钮作为单击的按钮。

要修复代码,我只需要更改按钮的#value 属性。当我更改树上的位置时它正在工作,因为在这种情况下,Drupal 选择了正确的按钮。

于 2012-10-23T07:34:12.777 回答
1

以下是使用此属性的示例:

$form['add_education'] = array(
    '#type' => 'submit',
    '#value' => 'Add',
    '#submit' => array('submit_function'),
    '#limit_validation_errors' => array(array('_education_submit')),
);
于 2013-03-30T02:15:47.817 回答
0

对于 Drupal 8,我必须从 a 切换type="submit"type="button"以禁用错误 + 使用 Ajax。

  public function buildForm(array $form, FormStateInterface $form_state) {

    // ...

    // Create Draft Button
    $form['#prefix'] = '<div id="send-emails-manual-send-by-role-wrapper">';
    $form['#suffix'] = '</div>';
    $form['actions']['save_draft'] = [
      '#type' => 'button',
      '#value' => $this->t('Save Draft'),
      '#name' => 'submit__save_draft', // TODO: Make constant
      '#limit_validation_errors' => [],
      '#ajax' => [
        'callback' => [$this, 'ajaxSubmitForm'],
        'wrapper' => 'send-emails-manual-send-by-role-wrapper',
        'method' => 'replace',
        'effect' => 'fade',
      ],
    ];
    
    return $form;  
  }

  /**
   * Submit the form using ajax
   */
  public function ajaxSubmitForm(array &$form, FormStateInterface $form_state) {
    $this->submitForm($form, $form_state);
    return $form;
  }
  
于 2022-01-18T23:09:02.667 回答