【问题标题】:Unable to access an error message corresponding to your field name Membership number.(Anonymous function)无法访问与您的字段名称会员编号对应的错误消息。(匿名函数)
【发布时间】:2017-03-06 17:42:45
【问题描述】:

我正在努力让 CodeIgniter 3 使用“任何规则”的方法:

https://www.codeigniter.com/userguide3/libraries/form_validation.html#callable-use-anything-as-a-rule

我使用下面的数组作为规则:

array(
    'required',
    array('memnum_unique', array($this->form_validation, 'memnum_unique'))
)

然后,我的函数定义如下:

public function memnum_unique()
{
    $memno = $this->CI->input->post('membership_number');
    $exists = $this->CI->votes_model->get_field_unique('membership_number', $memno, true);
    if (!empty($exists))
    {
        $this->CI->form_validation->set_message('memnum_unique', 'The membership number has to be unique. This one has already voted.');
        return false;
    }
    return true;
}

一般情况下,我会使用is_unique规则,但是上面的函数被裁剪掉了,包含了更多的验证条件,所以我不得不这样使用。

函数被调用 - 我可以验证。 if (!empty($exists))... 部分执行,但不知何故我仍然收到错误消息

Unable to access an error message corresponding to your field name Membership number.(Anonymous function)

表单域生成代码在我的“核心”模块中是这样设置的:

public function generate_field($id, $label, $rules, $val = '')
{
    $out = array(
        'id' => $id,
        'validation' => array(
            'field' => $id,
            'label' => $label,
            'rules' => $rules
        ),
        'value' => $val
    );
    return $out;
}    

它是这样创建的:

$data['fields']['add_member_membership_number'] = $this->core->generate_field('membership_number', 'Membership number', $this->validation_rules['add_member_membership_number']);

首先,它不是匿名函数,其次,它执行,我认为我一切都正确,为什么这不起作用?

【问题讨论】:

  • 我设法通过将函数从我的表单验证类移动到本地类来使其工作。尽管这解决了眼前的问题,但这是一个糟糕的解决方案,所以仍然在寻找正确的答案,如果有人有什么我可以尝试的:-) 谢谢!

标签: php codeigniter validation


【解决方案1】:

我遇到了这个确切的问题,但实际上它在 CodeIgniter 文档中得到了解决:CodeIgniter documentation

当然,由于 Callable 规则本身不是字符串,它也不是规则名称。当您想为它们设置错误消息时,这是一个问题。为了解决这个问题,您可以将这样的规则放在数组的第二个元素中,第一个元素是规则名称:

用这个例子:

$this->form_validation->set_rules(
        'username', 'Username',
        array(
                'required',
                array('username_callable', array($this->users_model, 'valid_username'))
        )
);

【讨论】:

  • 我正在遵循指南。我按照手册上说的做。
  • 如果您在 MY_Form_validation 中定义“memnum_unique”方法,您应该能够在验证规则设置中只使用“required|memnum_unique”。
猜你喜欢
  • 2012-05-23
  • 2015-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 2015-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多