【问题标题】:how can i pass data from parent controller in codeigniter如何在codeigniter中从父控制器传递数据
【发布时间】:2013-02-10 09:42:38
【问题描述】:

我试图阻止自己在每个控制器中一遍又一遍地重复相同的代码。所以我将获取数据的函数放在父控制器中,并且我试图在子控制器中传递该数据。

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);

我知道如果你扩展一个控制器(类),你可以访问父控制器(类)的方法和属性,因为它们被声明为公共的。

谁能解释我做错了什么?

问候,卓然

【问题讨论】:

    标签: codeigniter controller codeigniter-2


    【解决方案1】:

    CodeIgniter 并不神奇,它遵循 PHP 类规范和规则。像任何继承模型一样,要从父类访问变量,您必须将它们分配给父类中的$this

    父构造函数中的$this->specialdata = $this->configOptionsModel->get(); 可以为您工作,但请注意不要像这样疯狂地分配数据属性。在底层,以及继承链中的许多类,CodeIgniter 的核心可能保留了一些公共属性,您不想覆盖它们。

    【讨论】:

    • 一如既往,您的回答提供了解决方案和学习课程。很高兴再次见到你乔丹。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    • 2017-11-27
    相关资源
    最近更新 更多