CodeIgniter重用/扩展控制器

时间:2013-05-23 17:47:51

标签: php codeigniter dry

我有我的控制器

class Page extends CI_Controller {

    public function id() {
        $this->load->model('content');

        $page = $this->uri->segment(3, 0);
        if($page == 0)
            $page = $this->content->get_default_page($page);

        $data['navigation'] = $this->content->getNav();
        $data['pagename'] = $this->content->get_pagename($page);
        $data['content'] = $this->content->get_content($page);
        $this->load->view('main', $data);
    }
}

现在我试着解释一下。 我从mysql(id,navName,navText)获取导航和导航文本。 然后我在url中的views / main_view.php中返回这些元素,如:http://abc.com/page/id/1等......

现在我需要创建像mySuperDuperModule这样的其他控制器,它们的功能不仅仅是文本。

问题是,如果我创建像Gallery()这样的新控制器,我需要从Page()控制器复制所有东西,以使网站显示相同。

有没有办法不这样做?

2 个答案:

答案 0 :(得分:0)

您可以将这两行传递给任何控制器 它们将显示相同的模板。

$data['navigation'] = $this->content->getNav();
$data['pagename'] = $this->content->get_pagename($page);

如果您仍然不明白尝试使用此库

https://github.com/philsturgeon/codeigniter-template

答案 1 :(得分:0)

您可以在/application/core/MY_Controller.php下创建基本控制器 这里MY_是在/application/config/config.php中为$ config ['subclass_prefix']指定的值

class MY_Controller extends CI_Controller
{
    protected $data;
    public function __construct()
    {
        parent::__construct();
        $this->data = array();
    }
    public function loadPage($page)
    {
        $this->load->model('content');

        if($page == 0)
            $page = $this->content->get_default_page();  // I hope this function will give default page from database table. (A Change from your code)

        $this->data['navigation'] = $this->content->getNav();
        $this->data['pagename'] = $this->content->get_pagename($page);
        $this->data['content'] = $this->content->get_content($page);
    }
}

您在/application/controllers/page.php

中修改过的网页类
class Page extends MY_Controller
{
    public function __construct()
    {
        parent::__construct();
    }
    public function id()
    {
        $page = $this->uri->segment(3, 0);
        parent::loadPage($page);
        $this->load->view('main', $this->data);
    }
}

您的新图库控制器可以在/application/controllers/gallery.php

class Gallery extends MY_Controller
{
    public function __construct()
    {
        parent::__construct();
    }
    public function id()
    {
        $page = 10;  // Assuming gallery page index is 10 in database table OR you can change any logic here.
        parent::loadPage($page);
        $this->load->view('main', $this->data);
    }
}

您可以通过扩展MY_Controller来创建任意数量的控制器。