Я использую codeigniter 1.7.3, и у меня настроены и работают контроллеры, но у меня возникают проблемы с получением результата запроса, когда я пытаюсь получить доступ к модели через контроллер.
Моя база данных настроена правильно в области конфигурации (я знаю это, потому что, когда я намеренно испортил один из параметров конфигурации, я получаю сообщение о невозможности доступа к базе данных.)
Вот соответствующий код контроллера (SiteObj.php):
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.
А вот соответствующий код модели (site_model.php):
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
Я также попытался назвать исходную функцию Site_model вместо конструктора, но безуспешно. И я также попытался автоматически загрузить базу данных через файл autoload.php, а также загрузив базу данных внутри самой функции create_site вместо функции конструктора.
Вот сообщение об ошибке, которое я получаю:
Неустранимая ошибка: вызов функции-члена num_rows () для необъекта в
/www/development/sunrise_ci/00ci00/application/init/siteObj.php в строке 9
ОБНОВЛЕНИЕ: Я следовал совету первого респондента, но это не помогло.
С тех пор я удалил все ссылки на подключение к базе данных, пытаясь изолировать проблему. Когда я просто пытаюсь вызвать функцию create_site () из контроллера, я получаю это:
Undefined property: SiteObj::$Site_model
Fatal error: Call to a member function create_site() on a non-object
Так что, похоже, проблема в контроллере и модели, почему-то они не «правильно» разговаривают друг с другом. Интересно, что я вижу, что могу передать значение в контроллер из create_site (), но я все равно получаю сообщение об ошибке вместе с ним.
**** ОБНОВЛЕНИЕ 12/18 ****** ****
Хорошо, во-первых, я изменил файл application / config / hooks.php, чтобы я мог предварительно загрузить свой код инициализации перед всеми вызовами страницы. Итак, эта страница имеет следующее:
$hook['pre_controller'][] = array(
'class' => 'SiteObj',
'function' => '__construct',
'filename' => 'siteObj.php',
'filepath' => 'init'
);
Далее у меня есть контроллер по умолчанию, обрабатывающий все вызовы страницы. Он находится по адресу controllers / page.php и вот этот код:
class Page extends Controller {
// I am the core controller for the application.
function _remap() {
$mysite = new SiteObj();
}
}
Это вызывает объект init, который я настроил в application / init / siteobj.php. Вот этот код:
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;
}
}
}
Наконец, вот код модели в models / site_model.php:
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();
}
}
}
Я получаю эту ошибку:
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
Заранее спасибо!
Gary