Intereting Posts
Помещение основных классов выше корня сети – хорошая или плохая идея? PHP-массив получает следующий ключ / значение в foreach () Загрузка через JQuery AJAX Сообщение не работает Начало работы с заданиями cron и PHP (Zend Framework) symfony: Как разместить экран на ошибке формы? Как отправить данные формы и динамически отобразить их с помощью ajax на одной странице mod_rewrite работает на localhost, но не на сервере Как передавать данные сеанса в другом контроллере в CodeIgniter Как запретить пользователю использовать «источник просмотра», чтобы посмотреть на мой PHP-код и скопировать его? Показывать заказы с максимальной ценой сначала в PHP и MySQL php mysqli multi query асинхронный? netbeans xdebug ждет подключения, несмотря на все ответы на форуме Sanitizing строки, чтобы сделать их URL и имя файла безопасным? WooCommerce – Как удалить продукт и категорию продукта из URL-адресов? цена изменения woocommerce в кассе и картинной странице

CodeIgniter вызывает обратный вызов в пользовательском классе form_validation

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

OK CASE

Я делаю класс MY_Form_validation общедоступным методом обратного вызова.

Загружен в контроллер:

 public function __construct() { parent::__construct(); $this->load->helper(array('form', 'url')); $this->load->library('form_validation'); } 

используется в этом контроллере как:

 $this->form_validation->validate(); 

Я использую его так, как это делается в классе пользовательских форм:

 $this->CI->form_validation->set_rules('field', 'field', 'check_callback'); 

Обратите внимание, что он не называется callback_<name of method> который я не знаю ни почему, он работает только с префиксом callback_ при вызове внутри его собственного класса.

NOK CASE

Я делаю класс MY_Custom_form_validation с общедоступным методом обратного вызова.

Загружен в контроллер:

 public function __construct() { parent::__construct(); $this->load->helper(array('form', 'url')); $this->load->library('form_validation'); $this->load->library('my_custom_form_validation'); } $this->my_custom_form_validation->validate(); 

Те же настройки, что и OK CASE при использовании в set_rules но на этот раз я получаю следующую ошибку :

 Unable to access an error message corresponding to your field name field.(check_callback) 

Почему это происходит? Они различались только по имени файла и способу загрузки! Я что-то пропустил?

Или должен быть только один расширенный MY_Form_validation который будет содержать всю проверку для всего проекта? CI действительно предотвращает этот пользовательский класс в стороне от MY_Form_validation ?


MY_Form_validation.php

 <?php class MY_Form_validation extends CI_Form_validation { protected $CI; public function __construct($rules = array()) { parent::__construct($rules); $this->CI =& get_instance(); } public function validate() { $this->CI->form_validation->set_rules('value', 'value', 'trim|required|integer|check_value['.$this->CI->input->post('unit').']'); $this->CI->form_validation->set_rules('unit', 'unit', 'trim|required'); } public function check_value($value, $unit) { if($value >= 100) { return TRUE; } else { $this->CI->form_validation->set_message('check_value', 'The %s must be greater than or equal 100.'); return FALSE; } } 

MY_Custom_form_validation.php

 <?php class MY_Custom_form_validation extends CI_Form_validation { protected $CI; public function __construct($rules = array()) { parent::__construct($rules); $this->CI =& get_instance(); } public function validate() { $this->CI->form_validation->set_rules('value', 'value', 'trim|required|integer|check_value['.$this->CI->input->post('unit').']'); $this->CI->form_validation->set_rules('unit', 'unit', 'trim|required'); } public function check_value($value, $unit) { if($value >= 100) { return TRUE; } else { $this->CI->form_validation->set_message('check_value', 'The %s must be greater than or equal 100.'); return FALSE; } } 

Form.php , обратите внимание на ОК CASE и НЕ ОК.

 <?php class Form extends CI_Controller { public function __construct() { parent::__construct(); $this->load->helper(array('form', 'url')); // OK CASE $this->load->library('form_validation'); // NOK CASE $this->load->library('my_custom_form_validation'); $this->load->model('prf_model'); } public function submit() { $data['username'] = 'my_username'; $data['title'] = 'Submit a PRF'; $data['last_order_submission'] = ($this->prf_model->get_last_prf_order_submission()+1); // OK CASE $this->form_validation->validate(); // NOK CASE $this->my_custom_form_validation->validate(); if(!$this->form_validation->run()) { $this->load->view('templates/header', $data); $this->load->view('pages/form', $data); $this->load->view('templates/footer', $data); } else { $this->_save_to_database($_POST); redirect('form/success'); } }