【问题标题】:Codeigniter callback on empty fields?空字段上的 Codeigniter 回调?
【发布时间】:2013-03-10 16:13:09
【问题描述】:

我在处理空字段时遇到问题。

出于某种原因,我需要将字段的值与其他一些参数进行比较,并且只有在满足其他一些条件时才将其设为“必需”,然后从回调函数中对其进行检查。

很遗憾,如果字段为空,则不会调用回调函数。

你知道如何解决这个问题吗?

【问题讨论】:

  • 码友在哪里?
  • 不需要代码,真的如实描述。简单明了。
  • 代码很重要。你可能把你的规则命名错误,你的回调函数命名错误,等等......
  • 我相信是这样,但绝对不是这里的情况。

标签: forms codeigniter callback validation


【解决方案1】:

你可以像这样定义验证规则

你可以设置条件

if($this->input->post('first_field_name')){
    $this->form_validation->set_rules('2ndfield','Field Name','required|callback_myfunction');
}

【讨论】:

  • 有趣的方法。其实我已经发现这是一个错误。如果规则中没有定义“必需”选项,它只会选择一个回调。不幸的是,我不能使用你的方法,因为我在一个文件中定义了所有规则,所以这样做不是很方便。在 form_validation 中没有初始化的输入库,所以我必须使用 $_POST[...] 并且我不喜欢这么多的黑客攻击。
【解决方案2】:

这个“bug”实际上是表单验证的一个“特性”。如果输入为空并且未设置所需的规则,则它会跳过所有其他规则(甚至是非回调函数)。即使输入为空白,您也可以扩展(或破解)验证以继续执行所有函数。

system/libraries/Form_validation.php 大约第 486 行,您将看到评论:

// If the field is blank, but NOT required, no further tests are necessary

然后您将在该评论后不久看到两行带有return; 的行。我的行在第 498 行和第 536 行(评论后大约 12 和 50 行)。如果您将这两行注释掉,那么即使输入为空白,验证也会继续通过所有函数。

话虽如此,您可以通过在application/libraries/Form_validation.php 创建一个文件并覆盖_execute 函数来扩展表单验证:

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class MY_Form_validation extends CI_Form_validation
{
    protected function _execute($row, $rules, $postdata = NULL, $cycles = 0)
    {
        ...
    }
}

只需将整个函数复制到新文件并注释掉上述两个返回即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 1970-01-01
    • 2017-02-06
    相关资源
    最近更新 更多