簡體   English   中英

如何在視圖中檢索數據,獨立於Codeigniter中的控制器

[英]how to retrieve data in view Independent of controller in codeigniter

我的網站上有一個側邊欄,可從db接收一些信息,並且由於控制器和側邊欄相同,因此無法使用控制器來檢索數據。 如何在查看頁面中打印此數據。 當我在視圖中用PhP代碼編寫代碼時,顯示了無法定義變量的錯誤。

我該怎么辦?

當發現在許多不同的控制器中需要相同的代碼時,“自定義庫”(類)是最佳選擇。 這里可以找到用於創建自己的庫的文檔。

控制器應該使用模型從數據庫中獲取數據。 定制庫也可以像控制器一樣使用模型。 這是一個稱為Sidebar的非常基本的自定義庫。 它取決於將不會顯示的模型( sidebar_model )。 Sidebar庫的目的是返回sidebar_view文件所需的變量。

文件: application / libraries / Sidebar.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Sidebar
{
    protected $CI; // Read the documentation link to see why this is needed.

    public function __construct()
    {
        $this->CI = & get_instance();
        $this->CI->load->database();  //only needed if not already done 
        $this->CI->load->model('sidebar_model');
    }

    public function get_sidebar_data()
    {
        return $this->CI->sidebar_model->get_sidebar();
    }

}

庫方法get_sidebar_data()返回該視圖的變量。

這是使用自定義庫的控制器。 它將使用自定義庫和包含HTML邊欄的視圖文件(未顯示)。

文件: application / controllers / Main.php

class Main extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
        $this->load->library('sidebar'); //can also be autoloaded
    }


    public function index()
    {
        $data['sidebar'] = $this->sidebar->get_sidebar();
        $this->load
             ->view('banner')
             ->view('sidebar_view', $data)
             ->view('main_view')
             ->view('footer_view');
    }

}

需要顯示邊欄的任何其他控制器將使用相同的模式。

該控制器加載四個不同的視圖文件,並使用鼓勵的“方法鏈接”。 方法鏈接的執行速度更快。 但是使用它的最好理由是什么? 打字少。

方法更改也可以是這樣的類型:

$this->load->view('banner')->view('sidebar_view', $data)->view('main_view')->view('footer_view');

但是,IMO將每個->view()放在單獨的行上可以更輕松地閱讀。

  1. 您可以為常見任務創建一個助手。 然后為側邊欄創建一個函數,並在需要時調用它。 檢查此鏈接以獲取有關創建助手的更多詳細信息

  2. 您也可以為其創建一個庫。 雖然這不是一個很好的選擇。

  • 創建側邊欄(視圖頁面),並直接在該側邊欄中(視圖頁面)調用模型。

  • 其次,直接在所有其他視圖頁面內調用邊欄(視圖頁面)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM