1

我正在使用 Twitter Bootstrap 为注册页面设置validation_errors 样式:

<?php
echo "<div class='alert alert-error span4'>";
echo validation_errors(); 
echo "</div>";
?>

验证工作并显示,但部分样式始终存在(div 标签具有红色背景)。有没有办法让样式仅在validation_errors 存在时显示。我已经尝试了一些事情(在 php 标签中嵌入 html 并将 php 包含在 div 标签中),但结果是一样的。

4

5 回答 5

5

div结构仍然出现的原因是因为它在回显,而不考虑是否有错误。

您可以将变量的值设置为validation_errors()控制器中函数的结果,然后仅在实际出现错误时才在视图中显示警报 div...

您的控制器将分配变量来保存(潜在的)错误:

$this->data['reported_error'] = validation_errors();
$this->load->view('view_name', $this->data);

然后,如果出现错误,您的视图只会显示警报 div:

if ( isset($reported_error) )
{
    echo "<div class='alert alert-error span4'>".$reported_error."</div>";
}

这要求您的validation_errors函数仅在出现错误时返回一个值。

于 2012-04-04T02:35:56.560 回答
2

你可以试试这样的东西,它对我有用。

<?php if(validation_errors()):?>
<div class='alert alert-error span4'><?php echo validation_errors(); ?></div>
<?php endif;?>
于 2012-04-04T12:24:38.700 回答
1

我使用以下构造将带有特殊类的错误放在它们引用的字段旁边:

<div class="<?php echo my_error_class('fieldname') ?>">
<input type="whatever" name="fieldname" />
<span class="whatever"><?php echo my_error_msg('fieldname') ?></>
</div>

在 CI 帮助程序中具有以下功能:

<?php
    if ( ! function_exists('my_error_class')) {
      function my_error_class($field, $error_class = "error") {
        if (FALSE === ($OBJ =& _get_validation_object())){
            return '';
          }
        if(isset($OBJ->_field_data[$field]['error']) && !empty($OBJ->_field_data[$field]['error'])) {
          return $error_class;
          }
        else {
          return '';
        }
      }
    }

if ( ! function_exists('my_error_msg')) {
  function my_error_msg($field,$default = '') {
    if (FALSE === ($OBJ =& _get_validation_object())){
        return $default;
      }
    if(isset($OBJ->_field_data[$field]['error']) && !empty($OBJ->_field_data[$field]['error'])) {
      return $OBJ->_field_data[$field]['error'];
      }
    else {
      return $default;
    }

  }
}
于 2012-05-01T16:07:15.753 回答
1

我遇到了同样的问题。我将validation_errors() 分配给控制器中的一个变量并将其传递给视图。

离开詹姆斯的解决方案,我不得不改变:

if ( isset($reported_error) )

到:

if (!empty($reported_error))

一旦我这样做了,只有在出现错误时才会显示警报块。

于 2018-01-06T01:27:36.100 回答
0

我没有在指南中找到这个,但显然validation_errors 需要两个可选参数作为前缀和后缀......所以你可以这样做:

validation_errors('<p class="text-warning">', '</p>');
于 2013-04-30T19:06:50.460 回答