Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php drupal\u set\u消息不起作用_Php_Drupal_Checkbox_Drupal 7 - Fatal编程技术网

Php drupal\u set\u消息不起作用

Php drupal\u set\u消息不起作用,php,drupal,checkbox,drupal-7,Php,Drupal,Checkbox,Drupal 7,我有以下复选框: $severity_levels = variable_get('severity_levels', array()); // Declare empty options array $severity_options = array(); // Loop through each severity level and push to options array for form foreach (watchdog_se

我有以下复选框:

   $severity_levels = variable_get('severity_levels', array());

      // Declare empty options array
      $severity_options = array();

      // Loop through each severity level and push to options array for form
      foreach (watchdog_severity_levels() as $severity) {
        $severity_options[$severity] = t('@description', array(
          '@description' => drupal_ucfirst($severity),
        ));
      }
    $form['severity']['severity_levels'] = array(
          '#type' => 'checkboxes',
          '#options' => $severity_options,
          '#default_value' => array_values($severity_levels),
      );
我打电话给他们,我想在没有任何检查的情况下得到这个错误消息:

$severity_levels = variable_get('severity_levels', array());

  foreach ($severity_levels as $level => $selected) {
    if (!$selected) {
      continue;
      $message = 'You must select at least one severity';
      $type = 'error';
      drupal_set_message($message, $type);
      watchdog($type, $message);
    }
但这不是工作。。。。。我的错在哪里?

这是因为foreach循环中的continue。if条件下continue下的所有代码将不执行

此代码可以进一步帮助您。它基本上在未选择安全级别时设置消息

$has_error = null;
foreach ($severity_levels as $level => $selected) {
    if (!$selected) {
        $has_error = $has_error === null || $has_error === true 
            ? true : false;

        continue;
    }

    $has_error = false;
}

if ($has_error) {
    $message = 'You must select at least one severity';
    $type = 'error';

    drupal_set_message($message, $type);
    watchdog($type, $message);
}

用continue语句尝试和优化这样的循环并不值得增加复杂性

只需将标志设置为FALSE,然后遍历所有复选框,如果选中任何复选框,则将标志设置为TRUE。循环完成后,如果标志仍然为FALSE,则触发错误

试试这个:

function yourform_validate($form, &$form_state) {
  $checked = FALSE;

  $severity_levels = $form_state['values']['severity_levels'];
  foreach ($severity_levels as $level => $selected) {
    if ($selected) { $checked = TRUE; }
  }

  if ($selected === FALSE) {
    $message = 'You must select at least one severity.';
    $type = 'error';
    drupal_set_message($message, $type);
    watchdog($type, $message);
  }
}

我注意到您的原始代码从变量中检索$severity\u级别的值,而它应该从表单提交的值中获取这些值。我已经编辑了我的答案,以便它显示整个Drupal验证功能。回答“它不起作用”对我们没有帮助,请提供更多不起作用的信息。尝试添加一些调试代码以帮助您进一步。。。