我正在使用Twitter Bootstrap为注册页面设置validation_errors样式:
<?php
echo "<div class='alert alert-error span4'>";
echo validation_errors();
echo "</div>";
?>
验证工作并显示,但样式的一部分始终存在(div标签有红色背景)。有没有办法只在出现validation_errors时才显示样式。我尝试了一些东西(在php标签中嵌入html并将php封装在div标签中)但结果是一样的。
答案 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>');