【问题标题】:How to set a unique message for a rule on multiple inputs in CodeIgniter?如何为 CodeIgniter 中多个输入的规则设置唯一消息?
【发布时间】:2012-03-15 21:44:16
【问题描述】:

我的视图包含一个具有 3 个类似输入的表单:

<input type="text" name="email1" />
<input type="text" name="email2" />
<input type="text" name="email3" />

我添加了一个回调来控制每个文本框都没有收到当前会话的电子邮件。

public function check_session_email($email){
    if($this->session){
        if ($this->session->userdata('email') != $email){
            return TRUE;
        }else{
            $this->form_validation->set_message('check_session_email', 'You can't include your own email address.');
            return FALSE;
        }
    }
}

如果我使用当前会话电子邮件,错误消息会显示两次(三个相同)。

当然,这听起来合乎逻辑……但不是很人性化。所以我的问题是:如何在规则中只包含一条错误消息?

【问题讨论】:

  • 如果你可以让 CI 将消息放入一个数组中,你可以使用array_unique()

标签: php codeigniter input validation validationrules


【解决方案1】:

您最好的选择是在表单验证库之外进行验证。

控制器方法:

// general validation rules

if( $this->input->post('email1') == $this->session->userdata('email') || $this->input->post('email2') == $this->session->userdata('email') || $this->input->post('email3') == $this->session->userdata('email') )
{
    $data['own_mail_error'] = true;
}

if ($this->form_validation->run() == FALSE || isset($data['own_mail_error']))
{
  $this->load->view('myform', $data);
}
else
{
    $this->load->view('formsuccess');
}

你的看法:

<?php echo validation_errors(); ?>
<?php if(isset($own_mail_error)): ?>
<p>You can't include your own email address.</p>
<?php endif; ?>

【讨论】:

  • 谢谢,这很有道理。我用if(in_array($this-&gt;session-&gt;userdata('email'), $this-&gt;input-&gt;post())) 替换了第一行以得到更短的内容。
【解决方案2】:
    public function check_session_email($email)
    {
        if($this->session)
        {
            if ($this->session->userdata('email') != $email)
            {
                return TRUE;
            }
        }   
        else
        {
            if($this->form_validation->_field_data['email1']['error']=='' && $this->form_validation->_field_data['email2']['error']=='' && $this->form_validation->_field_data['email3']['error']=='')
            {
                $this->form_validation->set_message('check_session_email', 'You can\'t include your own email address.');
            }
            return FALSE;
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-22
    • 1970-01-01
    • 2019-09-03
    相关资源
    最近更新 更多