2013-06-26 2 views
0

Ниже приведен рабочий пример того, как в настоящее время функционирует мой сайт Codeigniter:Понимание CodeIgniter структура базового контроллера

Модель:

<?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(); 
    } 

Контроллер:

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

Вид:

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

Я хочу, чтобы начать использовать базовый контроллер для приведенного выше примера, и в то время как я следовал несколько онлайн примеров - я совсем не могу получить это право, и я оценил бы некоторые указания ...

  1. Я AutoLoad модели, никаких проблем
  2. The View файл остается
  3. я изменить файл config.php

контроллер:

<?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(); 
    } 
} 

Теперь, вот где я застрять - я не могу достаточно точно выяснить, что происходит в Main_Controller, и как она структурирована ...

Main_Controller:

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

Очевидно, что есть одна большая строка данных пропавших без вести от оригинального контроллера ...

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

Как все это связано?

+1

Почему вы пытаетесь использовать базовый контроллер? Вам нужно использовать один и тот же код в каждом контроллере, потому что это, по сути, базовый контроллер? Нам нужно узнать больше о том, что вы на самом деле пытаетесь выполнить ... –

+0

Это ТОЧНО, что я пытаюсь сделать, т.е. используйте один и тот же код на каждой веб-странице и на каждом контроллере, например, в нижнем колонтитуле веб-сайта, поэтому мне не нужно загружать одну и ту же функцию в каждый отдельный контроллер на моем сайте, пытаясь сделать его доступным на глобальном уровне. – user2505513

ответ

0

Не совсем уверен, если я правильно понимаю ваш вопрос, но если вы хотите, чтобы избежать повторения этой строки:

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

Что вы можете сделать, это положить, что в конструкторе и создать публичную переменную, в которой вы можете храните его.

т.е. 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(); 
    } 
} 

Контроллер:

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