Codeigniter возвращает ошибку проверки из вспомогательной функции - PullRequest
2 голосов
/ 31 июля 2011

У меня есть вспомогательная функция, которая проверяет правильность имени пользователя.

В файле помощника:

if ( ! function_exists('valid_username'))
{
    function valid_username($username)
    {
        $ci=& get_instance();
        $ci->load->database(); 

        if (empty($username) OR !preg_match("/^[a-z]([0-9a-z_-])+[0-9a-z]$/i", $username)) //Allowed a-z, 0-9, and underscores. Must end in a-z or 0-9.
        {
            $ci->form_validation->set_message('valid_username', 'Characters not valid.');
            return FALSE;
        }

        $ci->db->select('username');
        $ci->db->where('username', $username);
        $ci->db->where('activated', 1);
        $ci->db->where('banned', 0);
        $ci->db->limit(1);
        $query = $ci->db->get('users');

        if ($query->num_rows() > 0) //if user exists
        {
            return TRUE;
        }
        else
        {
            $ci->form_validation->set_message('valid_username', 'The %s does not exist.');
            return FALSE;
        }
    }
}

В моем контроллере я добавляю помощника к проверке формы:

$this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean|min_length[2]|max_length[50]|callback_valid_username');

//add callback from helper function
function valid_username($username)
{
    return valid_username($username);
}   

Это работает хорошо, но я должен сделатьприватный обратный вызов, например:

$this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean|min_length[2]|max_length[50]|callback__valid_username');

function _valid_username($username)
{
    return valid_username($username);
}   

После приватного обратного вызова при отправке неверного имени пользователя появляется следующее сообщение:

Невозможно получить сообщение об ошибке, соответствующее имени вашего поля.

Что я здесь не так делаю?

Ответы [ 2 ]

2 голосов
/ 31 июля 2011

Я не на 100% уверен, почему закрытие функции испортило ваши сообщения об ошибках, но я могу предложить обходной путь:

Правила проверки формы разрешают использовать любую функцию, которая принимает до 1 параметра в качествеправило проверки или подготовки.В общем, все, что доступно текущему сценарию, доступно и как правило проверки формы, включая вашу функцию valid_username().Попробуйте это (просто добавьте это к своим другим правилам):

$this->form_validation->set_rules('username', 'Username', 'valid_username');

Таким образом, вам не нужно нужен метод контроллера в качестве оболочки, и вам не нужно использовать callback_.
Посмотрите, работает ли это для вас.

Помимо : я бы предложил пропустить вызов function_exists(), когда вы определяете valid_username(), если только вы не уверен, что вы хотите разрешить перезаписи функции.

0 голосов
/ 24 мая 2016

Как правило, вы можете использовать все, что можно вызвать.Даже если это функция помощника. Проверьте это

Правильный синтаксис:

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

В помощнике, при необходимости, установите сообщение об ошибке, например:

$CI = &get_instance();
$CI->form_validation->set_message('valid_username_callable', 'Error message');
...