2013-02-10 3 views
1

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

class Frontend_Controller extends MY_Controller 
{ 
    public function __construct() 
    { 
     parent::__construct(); 
     $this->load->model('configOptionsModel'); 
    $this->db->where('configid = "2"'); 
     $specialdata['bgimage'] = $this->configOptionsModel->get();  
    }  
} 

Вот код для контроллера ребенка

class Home extends Frontend_Controller { 

public function __construct() { 
     parent::__construct(); 
     print_r($this->specialdta); // line where error occurs 
     die(); 
    } 

    public function index() 
{ 
    $data['main_content'] = 'home'; 
    $this->load->view('frontEnd/template',$data); 
} 
} 

я получаю следующее сообщение об ошибке:

A PHP Error was encountered 
Severity: Notice 
Message: Undefined property: Home::$specialdta 
Filename: controllers/home.php 
Line Number: 9 

Конечно, строка 9: print_r ($ this-> specialdta) ;

Я знаю, что если вы продлеваете контроллер (класс), у вас есть доступ к методам и свойствам родительского контроллера (классов), поскольку они объявлены общедоступными.

Может ли кто-нибудь объяснить мне, что я делаю неправильно?

С уважением, Зоран

ответ

1

CodeIgniter не магия и следует спецификации класса PHP и правила. Как и любая модель наследования, для доступа к переменным из родительского класса вы должны назначить их $this в родительском.

$this->specialdata = $this->configOptionsModel->get(); в родительском конструкторе будет работать на вас, но будьте осторожны с присвоением атрибутов данных так же, как это. Под капотом и многими классами по цепочке наследования ядро ​​CodeIgniter может иметь некоторые общие свойства, зарезервированные, и вы не хотите их перезаписывать.

+1

Как всегда, ваши ответы содержат как решение, так и учебный урок. Приятно видеть тебя снова Иорданией. Спасибо за вашу помощь. – Zoran

Смежные вопросы