【问题标题】:Drupal multiple custom field required, pass validation if field is emptyDrupal 需要多个自定义字段,如果字段为空则通过验证
【发布时间】:2018-01-09 14:00:02
【问题描述】:

我已经构建了一个包含多个值的自定义字段。我必须使这个字段成为必填项。但是如果至少一个字段被填写并且最后一个为空,我想通过验证。

但我的问题是 Drupal 警告我最后一个(空)字段是必需的。我以为hook_field_is_empty()解决了这个问题,但是,即使返回true,表单也无法验证。

非常感谢您的帮助。

实施:

function MYMODULE_field_widget_form(...) {
    $element['address']+=[
      ...
      '#required' => $instance['required'],
    ];
    ...
}

function MYMODULE_field_is_empty($item, $field) {
    if (empty($item['address']) && empty($item['other'])) {
        return true ;
    }
    return false ;
}

【问题讨论】:

    标签: php drupal-7 drupal-modules


    【解决方案1】:

    为了解决这个问题,我使我的字段不需要(在节点字段的定义中)。然后,我使用hook_form_alter()#validate 中添加了一个回调。在该回调中,我测试是否至少定义了一个字段,如果没有定义则调用form_set_error()

    这是有道理的,因为不是字段本身可以知道节点的所有数据。但是,有些地方有点不对劲,因为无法将此字段标记为必填项(例如星号)。

    <?php
    
    function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
      if ($formid == ...) { // a specific case
        array_unshift($form['#validate'], '_MYMODULE_validate_form') ;
      }
    }
    
    function _MYMODULE_validate_form(&$form, &$form_state) {
      if (empty($form_state['values']['field_geo'][LANGUAGE_NONE][0]['address'])) {
        form_set_error('field_geo', t('You have to define at least one address.')) ;
      }
    }
    
    ?>
    

    【讨论】:

      猜你喜欢
      • 2016-12-18
      • 2017-06-07
      • 2022-01-17
      • 2018-09-11
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多