Должна ли эта функция быть публичной или частной? - PullRequest
0 голосов
/ 14 июня 2011

Я проверяю электронную почту в базе данных при проверке формы в CodeIgniter, используя обратный вызов в правиле.Например,

$this -> form_validation -> set_rules( 'email', 'Email address', 'trim|valid_email|callback_email_exists' );

Функция email_exists:

public function email_exists($email)
    {
        $this -> load -> model('account_model');
        $exists = $this -> account_model -> email_registered( $email );
        if ( $exists == true )
        {
            $this -> form_validation -> set_message ( 'email_exists', 'Email already exists.');
            return false;
        }
        return true;        
    }

Работает нормально.Однако не должна ли указанная выше функция email_exists быть закрытой, а не публичной?Я пытаюсь сделать его приватным, как private function _email_exists($email), и перезваниваю по callback__email_exists

Однако я получаю сообщение об ошибке:

Fatal error: Call to private method Account::_email_exists() from context 'CI_Form_validation' in ....(line number)

Может кто-нибудь сказать мне, что не так?

Ответы [ 3 ]

0 голосов
/ 14 июня 2011

Вы можете сделать это:

$rules['field'] = 'callback__email_exists';
$this->validation->set_rules($rules);

function _email_exists() {
  // Normal callback function rules
} 

Обязательно добавьте два подчеркивания к обратному вызову вместо одного.

Не забудьте добавить подчеркивание к правилу сообщения какскважина:

$this->validation->set_message('_email_exists', 'The email already exists');

0 голосов
/ 14 июня 2011

Вы проверяете электронную почту на основе вашей модели account_model, так что это делает функцию более центрированной к частной границе.Делая эту функцию общедоступной, вы не добьетесь ничего значительного, вместо этого вы можете сделать эту функцию такой, какая она есть

A PRIVATE FUNCTION TO CHECK EMAILS FOR MODEL account_model
0 голосов
/ 14 июня 2011

Если вам нужно вызвать его извне объекта (как обратного вызова, так и напрямую), он должен быть публичным

...