1

以下は、私の Codeigniter Web サイトが現在どのように機能しているかの実例です。

モデル:

<?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. モデルを自動ロードします。問題ありません
  2. ビューファイルは残ります
  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_コントローラー

<?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!
        //
    }
}

明らかに、元のコントローラーから欠落している大きなデータ行が 1 つあります...

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

それはどのように結びついていますか?

4

1 に答える 1

1

あなたの質問を正しく理解しているかどうかは正確にはわかりませんが、この行を繰り返さないようにしたい場合:

$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));
    }
}
于 2013-06-26T20:45:10.520 に答える