Kontrolör ve modeli ile Codeigniter sorun

0 Cevap php

Ben CodeIgniter 1.7.3 kullanıyorum ve denetleyicileri kurdunuz ve çalışma, ama ben bir kontrolör üzerinden bir model erişmeye çalıştığınızda bir sorgu sonucu geri alma konusunda sorun yaşıyorum.

Ben benim veritabanı config alana doğru yapılandırılmış var (ben bunu biliyorum, çünkü ben veritabanı erişilemez söyleyerek bir mesaj alıyorum yapılandırma seçeneklerden biri kadar zaman kasten karışıklık.)

İşte, ilgili kontrolör (SiteObj.php) kodu bulunuyor:

class SiteObj extends Controller {
     function __construct() {
          parent::Controller();
          $this->load->model('Site_model');
          $data['query'] = $this->Site_model->create_site();

          if ($data->num_rows() == 1) {
             //etc. etc.

Ve burada ilgili Modeli (site_model.php) kodu:

class Site_model extends Model {
    function __construct() {
        parent::Model();
        $this->load->database();
    }

    function create_site(){
        $query = $this->db->query("SELECT * FROM sites WHERE siteid = '1' LIMIT 1");

        if ($query->num_rows() > 0) {
         $row = $query->row();
         return $row;
             // etc etc

Ben de ama hayır şans ile, yerine yapıcı başlangıç ​​fonksiyonu Site_model adlandırma denedim. Ve ben de otomatik yüklemeli autoload.php dosyası ile veritabanı denedim, ve aynı zamanda yerine, yapıcı işlevinin create_site fonksiyonu kendi içinde veritabanını yükleyerek.

İşte ben alıyorum hata iletisi:

Fatal error: Call to a member function num_rows() on a non-object in /www/development/sunrise_ci/00ci00/application/init/siteObj.php on line 9

GÜNCELLEME: Ben ilk müdahale tarafından verilen tavsiye izledi, ama yardımcı olmadı.

Ben beri sorunu yalıtmak amacıyla veritabanı bağlantısı yapılan tüm başvurular kaldırdık. Ben sadece denetleyici içinde create_site () işlevini çağırmak çalıştığınızda, ben bu olsun:

Undefined property: SiteObj::$Site_model
Fatal error: Call to a member function create_site() on a non-object

Yani nasılsa onlar doğru birbirlerine "konuşma" gibi görünmüyor, sorunu denetleyicisi ve model arasında görünüyor. İlginçtir, ben create_site () kontrolöre kadar bir değer geçirebiliriz, ama ben yine de onunla birlikte hata mesajlaşma olsun görmek mümkün.

** * * UPDATE 12/18 * ** * ** {[(1 )]} ** *

Ben öncesinde tüm sayfa aramaların benim init kodu önceden yükleyebilirsiniz böylece Tamam, ilk, ben application / config / hooks.php dosyasını değiştirdik. Yani bu sayfa, bu var:

$hook['pre_controller'][] = array(
        'class'    => 'SiteObj',
        'function' => '__construct',
        'filename' => 'siteObj.php',
        'filepath' => 'init'
    );

Sonra, ben tüm sayfa çağrıları işleme varsayılan denetleyici var. Bu kontrolörleri / page.php bulunan ve burada bu kod var:

class Page extends Controller {
        // I am the core controller for the application.
        function _remap() {
            $mysite = new SiteObj();
        }
    }

Bu benim başvuru / init / siteobj.php kurdunuz init nesnesini çağırır. İşte o kod:

class SiteObj extends Controller {
        function __construct() {
            parent::Controller();
            $this->load->model('Site_model');
            $data = $this->Site_model->create_site();
            if ($data){
                $this->siteid = $data->siteid;
            } else {
                $this->siteid = 0;
            }
        }
    }

Son olarak, burada modeller / site_model.php de model kodu bulunuyor:

class Site_model extends Model {
        function Site_model() {
            parent::Model();
            $this->load->database();
        }

        public function create_site(){
            // I load the site data from the database and send the result to the controller
            $query = $this->db->query("SELECT * FROM sites WHERE siteid = '1' LIMIT 1");
            if ($query->num_rows() == 1) {
                return $query->row();
            }
        }
    }

Ben bu hatayı alıyorum:

Undefined property: SiteObj::$Site_model
Fatal error: Call to a member function create_site() on a 
non-object in 
/www/development/sunrise_ci/00ci00/application/init/siteObj.php 
on line 7

Şimdiden teşekkürler!

Gary

0 Cevap