0

CI 2.1.3 を使用していますが、モデルの読み込みと CodeIgniter の「スーパー オブジェクト」の参照に問題があります。

例えば:

ログインコントローラーを使用してログインしようとしています:

class Login extends CI_Controller {

    public function __construct()
    {
        parent::__construct();
        $this->load->model('Users_model');
    }

    public function validate_credentials() {
        $this->load->library('form_validation');
        // Some form validation here...

        $query = $this->Users_model->validate();

        if($query) {    // if the user's credentials validated...
            // something
        } else {
            // something
        }
    }

そして、Users_model に到達すると:

class Users_model extends CI_Model {

public function __construct()
{
    parent::__construct();
}

public function validate()
{
    $this->db->where('active', 1);
    $this->db->where('email', $this->input->post('email'));
    $this->db->where('password', md5($this->input->post('password')));
    $query = $this->db->get('user');

    if($query->num_rows == 1)
    {
        return $query;
    }

}
}

validate() 関数の最初の行を参照して、「致命的なエラー: XX 行の users_model.php の非オブジェクトでメンバ関数 where() を呼び出します」というエラーが表示されます。

Users_model::validate() のようなログイン コントローラーで二重コロン (::) 演算子を使用して動作させることができますが、それは必要ないと思います。

次のように書いて動作させることもできます。

    $ci = get_instance();
    $ci->db->where...

Users_model->validate() 関数の開始時ですが、それも行う必要はないと思います。

データベース クラスは autoload.php にロードされています。

したがって、問題は、私のモデルの$thisが、想定されている「スーパー オブジェクト」ではなく、モデル クラス自体を参照していることです。手が残っていないので、非常に単純なことだと思いますが、それがわかりません。私を助けてください。

4

1 に答える 1

1

こんな感じ でCIライブラリを読み込んでみてください

  $this->load->library('database');

モデルをロードする前に __construct() 関数で: または、このライブラリを autoload ファイルから次のようにロードします。

$autoload['libraries'] = array('database','form_validation', 'session');
于 2013-03-09T12:42:11.913 に答える