По умолчанию библиотека Form_validation использует свойство $CI
, чтобы проверить, существует ли метод обратного вызова.Обычно это выглядит на текущий контроллер.Однако вы можете изменить это поведение, расширив класс проверки и изменив метод run()
.
class MY_Form_validation extends CI_Form_validation {
/**
* Support for validation callbacks from any object
*
* @access public
* @param object The object to run callbacks from
* @param string Is there a validation rule for the particular URI being accessed?
* @return bool Validation status
*/
function run($obj = '', $group = '')
{
// Assign the callback object
if (is_object($obj)) $this->CI =& $obj;
// Run the validation as normal
return parent::run($group);
}
}
Мы просто переназначаем свойство $CI
.Так, например, чтобы использовать обратные вызовы из класса user_validation
, вы можете сделать это:
$callback_class = $this->user_validation;
if ($this->form_validation->run($callback_class)) {}
Любой загруженный класс будет работать, поэтому вы можете хранить правила обратного вызова в моделях или библиотеках, просто передавая объект, который выхотите обрабатывать обратные вызовы с помощью метода run()
.