Проблема Codeigniter с контроллером и модельюPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Проблема Codeigniter с контроллером и моделью

Сообщение Anonymous »

Я использую 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(), но вместе с ним все равно получаю сообщение об ошибке.
************ ОБНОВЛЕНИЕ от 18 декабря **********************
Хорошо, во-первых, я внес поправки в файл application/config/hooks.php, чтобы я мог предварительно загружать свой код инициализации перед вызовами всех страниц. Итак, на этой странице есть следующее:
$hook['pre_controller'][] = array(
'class' => 'SiteObj',
'function' => '__construct',
'filename' => 'siteObj.php',
'filepath' => 'init'
);

Далее у меня есть контроллер по умолчанию, обрабатывающий все вызовы страниц. Он расположен по адресу контроллеры/page.php, вот этот код:
class Page extends Controller {
// I am the core controller for the application.
function _remap() {
$mysite = new SiteObj();
}
}

Это вызывает объект инициализации, который я настроил в 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


Подробнее здесь: https://stackoverflow.com/questions/447 ... -and-model
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»