user2505513
user2505513

Reputation: 333

Understanding codeigniter base controller structure

The following is a working example of how my Codeigniter website currently functions:

Model:

<?php
class Default_model extends CI_Model
{

    function __construct()
    {
        // Call the Model constructor
        parent::__construct();
    }


    function get_link()
    {
        $query = $this->db->query('SELECT * FROM links LIMIT 5');
        return $query->result();
    }

Controller:

<?php
class Home extends CI_Controller {

    public function index()
    {
        $this->load->model('segment1/Page_model');
        $data['link'] = $this->Page_model->get_link();
        $this->load->view('page_view', $data);
    }
}

View:

<h2>Link</h2>
<ul>
<?php if (isset($link)):?>
    <?php foreach ($link as $row):?>
        <li><a href="<?=$row->url?>"><?=$row->link?></a></li>
    <?php endforeach;?>
<?php endif;?>
</ul>

I want to begin using a base controller for the above example, and while I've followed a few online examples - I can't quite get it right, and I'd appreciate some guidance...

  1. I autoload the Model, no problem
  2. The View file remains
  3. I alter the config.php file

Controller:

<?php
class Home extends Main_Controller {

    public function index()
    {
        $this->load->model('segment1/Page_model');
        $this->load->view('page_view', $data);
    }
}

MY_Controller

<?php
class MY_Controller extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
    }
}

Now, here's where I get stuck - I can't quite figure out exactly what goes in the Main_Controller, and how it's structured...

Main_Controller:

<?php
class Main_Controller extends MY_Controller
{
    function __construct()
    {
        parent::__construct();
        //
        // WHAT GOES IN HERE?
        // SERIOUSLY, HELP!
        //
    }
}

Clearly, there's one big line of data missing from the original controller...

$data['link'] = $this->Page_model->get_link();

How does it all tie up?

Upvotes: 1

Views: 1109

Answers (1)

Mark Basmayor
Mark Basmayor

Reputation: 2569

Not exactly sure if I understand your question correctly, but if you want to avoid repeating this line:

$data['link'] = $this->Page_model->get_link();

What you can do is to put that in the constructor and create a public variable where you can store it.

i.e. Main_Controller:

<?php
class Main_Controller extends MY_Controller
{
    public $link;

    function __construct()
    {
        parent::__construct();
        $this->load->model('segment1/Page_model');
        $this->link = $this->Page_model->get_link();
    }
}

Controller:

<?php
class Home extends Main_Controller {

    public function index()
    {
        $this->load->view('page_view', array('link' => $this->link));
    }

    public function another_page()
    {
        // you can keep using the value assigned to link in other
        // methods without having to call Page_model->get_link() everytime
        $this->load->view('page_view', array('link' => $this->link));
    }
}

Upvotes: 1

Related Questions