Вызов пользовательского помощника или библиотечной функции в set_rules()
Я пытаюсь вызвать метод пользовательской библиотеки в строке set_rules(...).
Я слышал, что можно создать класс (в приложении / библиотеках), расширяющий собственный класс Form_validation, и написать там собственные методы.
Итак, у меня есть /application/libraries/MY_Form_validation.php со следующим кодом;
class MY_Form_validation extends CI_Form_validation {
public function __construct()
{
parent::__construct();
}
function test_my_method($str)
{
//echo "test"; exit;
if ( ! is_array($str))
{
return (trim($str) == '') ? FALSE : TRUE;
}
else
{
return ( ! empty($str));
}
}
}
и в функции контроллера у меня есть;
...
public function login() {
$this->load->library('form_validation');
//echo ($this->form_validation->test_my_method(''))? "true":"false";
$this->form_validation->set_rules('username', 'Username', 'trim|test_my_method');
$this->form_validation->set_rules('password', 'Password', 'required');
if($this->form_validation->run())
{ echo "Success"; }
}
...
Функция ( test_my_method) недоступна при вызове в строке set_rules(). Есть идеи, что может быть не так? Благодарю.
1 ответ
Я не видел причин, по которым вы не использовали функцию обратного вызова вместо расширения класса проверки формы для своей задачи. См. Обратные вызовы: Ваши собственные функции проверки для деталей. Вы сделали, расширяет класс, если вам нужно как-то изменить его исходное поведение, а не для такого рода задач. Кроме того, кроме того, если вы уже установили какой-либо пользовательский обратный вызов, вам не нужно включать другое правило (например, обрезать, требуется и т. Д.), Поскольку вы можете проверить все аспекты этого поля в своей пользовательской функции обратного вызова.