Twitter Bootstrap和CodeIgniter的Validation_Errors

时间:2012-04-04 01:35:14

标签: php codeigniter twitter-bootstrap

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

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

验证工作并显示,但样式的一部分始终存在(div标签有红色背景)。有没有办法只在出现validation_errors时才显示样式。我尝试了一些东西(在php标签中嵌入html并将php封装在div标签中)但结果是一样的。

5 个答案:

答案 0 :(得分:4)

div结构仍然出现的原因是因为它在不考虑是否存在错误的情况下回响。

您可以将变量的值设置为Controller中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函数仅在出现错误时返回值。

答案 1 :(得分:2)

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

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

答案 2 :(得分: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;
    }

  }
}

答案 3 :(得分:1)

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

关闭詹姆斯的解决方案,我不得不改变:

if ( isset($reported_error) )

为:

if (!empty($reported_error))

一旦我这样做,警报块仅在出现错误时显示。

答案 4 :(得分:0)

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

validation_errors('<p class="text-warning">', '</p>');