Как установить уникальное сообщение для правила на нескольких входах в CodeIgniter? - PullRequest
0 голосов
/ 26 февраля 2012

Мое представление содержит форму с 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;
        }
    }
}

Если я использовал текущий сеанс электронной почты, сообщение об ошибке отображается дважды (то же самое с тремя).

enter image description here

Конечно, это звучит логично ... но не очень удобно для пользователя. Поэтому мой вопрос: как включить в правило только одно сообщение об ошибке?

Ответы [ 2 ]

1 голос
/ 26 февраля 2012

Ваш лучший вариант - проверить это за пределами библиотеки проверки форм.

Метод контроллера:

// 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; ?>
0 голосов
/ 26 февраля 2012
    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;
        }
    }
...