CodeIgnite視圖

2018-08-07 12:53 更新

視圖

簡(jiǎn)單來(lái)說,一個(gè)視圖其實(shí)就是一個(gè) Web 頁(yè)面,或者頁(yè)面的一部分,像頁(yè)頭、頁(yè)腳、側(cè)邊欄等。 實(shí)際上,視圖可以很靈活的嵌在另一個(gè)視圖里,然后這個(gè)視圖再嵌在另一個(gè)視圖里,等等, 如果你想使用這種層次結(jié)構(gòu)的話,可以這樣做。

視圖不是直接被調(diào)用的,它必須通過 控制器 來(lái)加載。在 MVC 框架里, 控制器扮演著類似于交警的角色,它專門負(fù)責(zé)讀取特定的視圖。如果你還沒有讀過 控制器 頁(yè)面,你應(yīng)該先看下這個(gè)。

使用在 控制器 頁(yè)面中創(chuàng)建的控制器例子,讓我們?cè)偬砑右粋€(gè)視圖。

創(chuàng)建視圖

使用你的文本編輯器,創(chuàng)建一個(gè) blogview.php 文件,代碼如下:




    

Welcome to my Blog!

然后保存到你的 application/views/ 目錄下。

加載視圖

使用下面的方法來(lái)加載指定的視圖:

$this->load->view('name');

name 參數(shù)為你的視圖文件名。

注解
文件的擴(kuò)展名 .php 可以省略,除非你使用了其他的擴(kuò)展名。

現(xiàn)在,打開你之前創(chuàng)建的控制器文件 Blog.php ,然后將 echo 語(yǔ)句替換成 加載視圖的代碼:

<?php
class Blog extends CI_Controller {

    public function index()
    {
        $this->load->view('blogview');
    }
}

跟之前一樣,通過類似于下面的 URL 來(lái)訪問你的網(wǎng)站,你將看到新的頁(yè)面:

example.com/index.php/blog/

加載多個(gè)視圖

CodeIgniter 可以智能的處理在控制器中多次調(diào)用 $this->load->view() 方法。 如果出現(xiàn)了多次調(diào)用,視圖會(huì)被合并到一起。例如,你可能希望有一個(gè)頁(yè)頭視圖、 一個(gè)菜單視圖,一個(gè)內(nèi)容視圖 以及 一個(gè)頁(yè)腳視圖。代碼看起來(lái)應(yīng)該這樣:

<?php

class Page extends CI_Controller {

    public function index()
    {
        $data['page_title'] = 'Your title';
        $this->load->view('header');
        $this->load->view('menu');
        $this->load->view('content', $data);
        $this->load->view('footer');
    }

}

在上面的例子中,我們使用了 "添加動(dòng)態(tài)數(shù)據(jù)" ,我們會(huì)在后面講到。

在子目錄中存儲(chǔ)視圖

如果你喜歡的話,你的視圖文件可以放到子目錄下組織存儲(chǔ),當(dāng)你這樣做, 加載視圖時(shí)需要包含子目錄的名字,例如:

$this->load->view('directory_name/file_name');

向視圖添加動(dòng)態(tài)數(shù)據(jù)

通過視圖加載方法的第二個(gè)參數(shù)可以從控制器中動(dòng)態(tài)的向視圖傳入數(shù)據(jù), 這個(gè)參數(shù)可以是一個(gè) 數(shù)組 或者一個(gè) 對(duì)象 。這里是使用數(shù)組的例子:

$data = array(
    'title' => 'My Title',
    'heading' => 'My Heading',
    'message' => 'My Message'
);

$this->load->view('blogview', $data);

這里是使用對(duì)象的例子:

$data = new Someclass();
$this->load->view('blogview', $data);

注解
當(dāng)你使用對(duì)象時(shí),對(duì)象中的變量會(huì)轉(zhuǎn)換為數(shù)組元素。

讓我們?cè)谀愕目刂破魑募袊L試一下,添加如下代碼:

<?php
class Blog extends CI_Controller {

    public function index()
    {
        $data['title'] = "My Real Title";
        $data['heading'] = "My Real Heading";

        $this->load->view('blogview', $data);
    }
}

再打開你的視圖文件,將文本修改為傳入的數(shù)組對(duì)應(yīng)的變量:



    <?php echo $title;?>


    

<?php echo $heading;?>

然后通過剛剛的 URL 重新加載頁(yè)面,你應(yīng)該可以看到變量被替換了。

使用循環(huán)

傳入視圖文件的數(shù)據(jù)不僅僅限制為普通的變量,你還可以傳入多維數(shù)組, 這樣你就可以在視圖中生成多行了。例如,如果你從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù), 一般情況下數(shù)據(jù)都是一個(gè)多維數(shù)組。

這里是個(gè)簡(jiǎn)單的例子,將它添加到你的控制器中:

<?php
class Blog extends CI_Controller {

    public function index()
    {
        $data['todo_list'] = array('Clean House', 'Call Mom', 'Run Errands');

        $data['title'] = "My Real Title";
        $data['heading'] = "My Real Heading";

        $this->load->view('blogview', $data);
    }
}

然后打開你的視圖文件,創(chuàng)建一個(gè)循環(huán):



    <?php echo $title;?>


    

<?php echo $heading;?>

My Todo List

    <?php foreach ($todo_list as $item):?>
  • <?php echo $item;?>
  • <?php endforeach;?>

注解
你會(huì)發(fā)現(xiàn)在上例中,我們使用了 PHP 的替代語(yǔ)法,如果你對(duì)其還不熟悉,可以閱讀 這里 。

將視圖作為數(shù)據(jù)返回

加載視圖方法有一個(gè)可選的第三個(gè)參數(shù)可以讓你修改它的默認(rèn)行為,它讓視圖作為字符串返回 而不是顯示到瀏覽器中,這在你想對(duì)視圖數(shù)據(jù)做某些處理時(shí)很有用。如果你將該參數(shù)設(shè)置為 TRUE , 該方法返回字符串,默認(rèn)情況下為 FALSE ,視圖將顯示到瀏覽器。如果你需要返回的數(shù)據(jù), 記住將它賦值給一個(gè)變量:

$string = $this->load->view('myfile', '', TRUE);
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)