【发布时间】:2012-02-17 03:04:18
【问题描述】:
在使用 CodeIgniter 的表单验证时,我看到有一个 form_error() 函数用于打印错误(如果存在),如果不存在则打印空 html 标记。如果特定字段存在错误,是否有一种简单的方法来进行布尔测试?我想更改输入元素本身的类,而不仅仅是打印出错误。实现这一目标的最佳方法是什么?
【问题讨论】:
在使用 CodeIgniter 的表单验证时,我看到有一个 form_error() 函数用于打印错误(如果存在),如果不存在则打印空 html 标记。如果特定字段存在错误,是否有一种简单的方法来进行布尔测试?我想更改输入元素本身的类,而不仅仅是打印出错误。实现这一目标的最佳方法是什么?
【问题讨论】:
我不在可以测试这个的地方,但这不可行吗?
<?php
if (!empty(form_error('username')))
{
$class = "error";
}
else
{
$class = "valid";
}
?>
<input type="text" name="username" class="<?= $class ?>" value="<?= set_value('username') ?>" />
【讨论】:
_error_array,这有点烦人——您必须使用其中一个输出字符串的函数。在将error_delmiters 设置为空白(CI 硬编码\n 与validation_errors() 之间的错误之间)之后,我必须通过explode("\n", validation_errors()) 创建自己的数组,这甚至不包括哪个字段有错误,只是消息。很长的一段话,我认为你确实必须做这样的事情,即使它并不完全优雅。
查看源代码(https://github.com/EllisLab/CodeIgniter/blob/v2.1.0/system/libraries/Form_validation.php 的第 207 行),如果没有与给定字段关联的错误,form_error() 返回一个空字符串。您可以检查该方法返回的内容并将其用作更改元素类的条件。
【讨论】:
这对我有用
<?php
if(form_error('field_name') != '')
{
$class = 'error';
}
不知道为什么当 !empty 抛出错误时这会起作用:Can't use function return value in write context。
【讨论】:
我就是这样用的
<div class="control-group <?php if (form_error('group')!="") echo "error"; ?>">
【讨论】:
<?= form_error('group') ? 'error' : '' ?>
另一个选项可以是父元素的样式。
例如
我使用了 twitter 引导程序,所以这里是代码
<div class="controls">
<input type="text" name="dob" id="dob">
<?php echo form_error('dob'); ?>
</div>
为了设置错误的样式,我刚刚将它添加到 css 中
> .controls p { color : red; }
错误元素显示在 p 标记中。 希望对您有所帮助。
【讨论】: