Проблема с моими собственными библиотеками и формами проверки.Codeigniter - PullRequest
0 голосов
/ 09 августа 2011

У меня проблема, все работало, но затем я попытался поместить свои функции в свои собственные библиотеки (чтобы использовать их в разных контроллерах), и это не работает.

У меня есть контроллер SIGNUP с этим:

$this->load->library('Check_functions');        
// We check the form
$return_verif_form_signup = $this->check_functions->verif_form_signup($language);

, который вызывает мою библиотеку Check_functions:

class Check_functions {
public function verif_form_signup($language) {
if ($this->input->post()){
// Verification rules
$this->form_validation->set_rules('name', 'lang:name', 'trim|required|xss_clean');
....

if ($this->form_validation->run($this)) {
                extract($_POST);
...
...
}

Но я получаю ошибку: Неустранимая ошибка: вызов функции-члена post () для необъекта

Кто-нибудь знает, как я мог это исправить?

спасибо!

РЕДАКТИРОВАТЬ:

Я обнаружил проблему, функция обратного вызоване называется.Если я заменю callback_free_email на REQUIRED и не введу электронное письмо, моя форма не будет отправлена, так что все в порядке.Но если у меня есть следующий код, моя форма всегда отправляется.Поэтому функция обратного вызова никогда не вызывается ...

Это мой код (я использую HMVC ):

class Check_functions {

private $CI;
public function __construct(){
      $this->CI =& get_instance();
}

public function verif_form_signup($language) {
   if ($this->CI->input->post()){
      $this->CI->form_validation->set_rules('name', 'lang:field_name', 'trim|required|min_length[3]|max_length[25]|xss_clean');
      $this->CI->form_validation->set_rules('email_signup', 'lang:field_email', 'callback_free_email');
...//other rules

        if ($this->CI->form_validation->run($this->CI)) {
         .....
        }
    }
}

public function free_email($str) {
        return FALSE; // I have temporarly set that so I see if my function is called
    }
}

У меня есть файл с именем MY_Form_validation.php как предложено здесь: http://codeigniter.com/forums/viewthread/143057/#769347

class MY_Form_validation extends CI_Form_validation{

    function run($module = '', $group = ''){
        (is_object($module)) AND $this->CI = &$module;
            return parent::run($group);
    }

}

Я действительно не знаю, что не так ... почему моя функция обратного вызова не вызывается?

Спасибоза вашу помощь!

Ответы [ 2 ]

0 голосов
/ 14 августа 2011

Я наконец нашел обходной путь, вместо того, чтобы использовать обратный вызов в моем правиле, я делаю тест позже и вызываю функцию проверки.Это так хорошо работает.Спасибо за вашу помощь!

0 голосов
/ 09 августа 2011

когда вы пишете библиотеки, вы должны вручную получить экземпляр Codeigniter, как этот

$CI =& get_instance();

тогда вы будете использовать $CI, где вы обычно используете $this для взаимодействия с загруженными ресурсами codeigniter

так ...

вместо

$this->input->post();

вы бы написали

$CI->input->post();

Документы объясняют это здесь http://codeigniter.com/user_guide/general/creating_libraries.html

ПРИМЕР БИБЛИОТЕЧНОЙ СТРУКТУРЫ

class Examplelib {

    // declare your CI instance class-wide private
    private $CI;

    public function __construct()
    {
        // get the CI instance and store it class wide
        $this->CI =& get_instance();
    }

    public function lib_function()
    {
        // use it here
        $this->CI->db->etc()
    }

    public function another_func()
    {
        // and here
        $this->CI->input->post();
    }

}
...