【问题标题】:Drupal 8 optional in drupal_process_states doesn't workdrupal_process_states 中可选的 Drupal 8 不起作用
【发布时间】:2016-09-24 13:08:00
【问题描述】:

我用drupal_process_states 定义了几个条件字段,只有在单选按钮的值为“post”时才应显示和验证这些条件字段。它适用于“不可见”和“禁用”属性,但不适用于“可选”属性。它允许提交表单,但在后端验证时失败,表明这些字段是必需的。这是我的代码更改钩子:

$states_when_delivery_is_post = array(
    'disabled' => array(
        ':input[name="field_delivery_way"]' => array('value' => 'email'),
    ),
    'optional' => array(
        ':input[name="field_delivery_way"]' => array('value' => 'email'),
    ),
    'invisible' => array(
        ':input[name="field_delivery_way"]' => array('value' => 'email'),
    ),
);

if (isset($form['field_country'])) {
  $form['field_country']['#states'] = $states_when_delivery_is_post;
}

有什么想法吗?

【问题讨论】:

    标签: forms field conditional drupal-8


    【解决方案1】:

    显然,状态只提供前端功能,所以你应该自己实现后端规则。例如,如果交付方式是电子邮件,我不需要地址字段,因此我正在清除这些地址字段错误:

    function module_name_form_name_validation(&$form, \Drupal\Core\Form\FormStateInterface $form_state) {
        if ($form_state->getValue('field_delivery_way')[0]['value'] == 'email') {
            $errors = $form_state->getErrors();
            $conditional_fields = ['field_city][0][value', 'field_house_number][0][value', 'field_postcode][0][value', 'field_street][0][value', 'field_country'];
            $form_state->clearErrors();
            foreach ($errors as $element => $error) {
                if (!in_array($element, $conditional_fields)) {
                    $form_state->setErrorByName($element, $error);
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-08
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多