Когда данные POST отправляются на:
Auth::instance()->register( $_POST );
Затем данные проверяются ... Если это не так, я предполагаю, что класс проверки в Кохане выдает исключение. И тогда функция try-catch перехватывает его. Проблема у меня с этим методом:
$this->send_confirmation_email($_POST);
Вызывается, даже если данные недействительны. Я полагал, что если бы данные были недействительными, они пропустили бы все остальное и прыгнули бы, чтобы поймать ... Но, похоже, я ошибся, потому что я получаю неприятную фатальную ошибку из-за способа отправить электронное письмо, потому что не может найти адрес электронной почты. ..
try {
if( ! $optional_checks ) {
//throw new ORM_Validation_Exception("Invalid option checks");
}
$_POST['email_code'] = Auth::instance()->hash(date('YmdHis', time()));
Auth::instance()->register( $_POST );
$this->send_confirmation_email($_POST);
// sign the user in
Auth::instance()->login($_POST['username'], $_POST['password']);
// redirect to the user account
$this->request->redirect('user/profile');
} catch (Validation_Exception $e) {
Итак, есть ли способ, чтобы метод отправки электронной почты был пропущен, если данные неверны?
Можно сказать, что я должен использовать метод check (). Вот почему это проблема:
Validation::factory($fields)
->rules('username', $this->_rules['username'])
->rule('username', 'username_available', array($this, ':field'))
->rules('email', $this->_rules['email'])
->rule('email', 'email_available', array($this, ':field'))
->rules('password', $this->_rules['password'])
->rules('password_confirm', $this->_rules['password_confirm']);
if (Kohana::config('useradmin')->activation_code) {
Validation::factory($fields)->rule('activation_code', 'check_activation_code', array($this, ':field'));
}
Заранее спасибо за любую помощь.
UPDATE:
Теперь кажется, что есть проблема с классом валидации Kohana.
Вот метод в моем классе Model_User:
public function create_user($fields)
{
Validation::factory($fields)
->rules('username', $this->_rules['username'])
->rule('username', 'username_available', array($this, ':field'))
->rules('email', $this->_rules['email'])
->rule('email', 'email_available', array($this, ':field'))
->rules('password', $this->_rules['password'])
->rules('password_confirm', $this->_rules['password_confirm']);
//->labels($_labels);
if (Kohana::config('useradmin')->activation_code) {
Validation::factory($fields)->rule('activation_code', 'check_activation_code', array($this, ':field'));
}
// Generate a unique ID
$uuid = CASSANDRA::Util()->uuid1();
//CASSANDRA::selectColumnFamily('UsersRoles')->insert($username, array('rolename' => 'login'));
CASSANDRA::selectColumnFamily('Users')->insert($uuid, array(
'username' => $fields['username'],
'email' => $fields['email'],
'password' => Auth::instance()->hash($fields['password']),
'logins' => 0,
'last_login' => 0,
'last_failed_login' => 0,
'failed_login_count' => 0,
'created' => date('YmdHis', time()),
'modify' => 0,
'role' => 'login',
'email_verified' => $fields['email_code'],
));
}
Код после класса проверки выполняется . Таким образом, даже если данные недействительны, они все равно добавляют нового пользователя в базу данных.
Тест, который я делаю, с пустыми входами.
Вот правила:
protected $_rules = array(
'username' => array(
'not_empty' => NULL,
'min_length' => array(4),
'max_length' => array(32),
'regex' => array('/^[-\pL\pN_.]++$/uD'),
),
'password' => array(
'not_empty' => NULL,
'min_length' => array(8),
'max_length' => array(42),
),
'password_confirm' => array(
'matches' => array('password'),
),
'email' => array(
'not_empty' => NULL,
'min_length' => array(4),
'max_length' => array(127),
'validate::email' => NULL,
),
);
Еще раз спасибо заранее за любую помощь.