CodeIgniter 加載靜態(tài)內(nèi)容

2018-07-21 15:36 更新

加載靜態(tài)內(nèi)容

Note: 這篇教程假設(shè)你已經(jīng)下載好 CodeIgniter ,并將其 安裝 到你的開(kāi)發(fā)環(huán)境。

你要做的第一件事情是新建一個(gè) 控制器 來(lái)處理靜態(tài)頁(yè)面,控制器就是一個(gè)簡(jiǎn)單的類, 用來(lái)完成你的工作,它是你整個(gè) Web 應(yīng)用程序的 “粘合劑” 。

例如,當(dāng)訪問(wèn)下面這個(gè) URL 時(shí):

http://example.com/news/latest/10

通過(guò)這個(gè) URL 我們就可以推測(cè)出來(lái),有一個(gè)叫做 "news" 的控制器,被調(diào)用的方法為 "latest" , 這個(gè)方法的作用應(yīng)該是查詢 10 條新聞條目并顯示在頁(yè)面上。在 MVC 模式里,你會(huì)經(jīng)??吹较旅?格式的 URL :

[http://example.com/[controller-class]/[controller-method]/[arguments](http://example.com/[controller-class]/[controller-method]/[arguments)]

在正式環(huán)境下 URL 的格式可能會(huì)更復(fù)雜,但是現(xiàn)在,我們只需要關(guān)心這些就夠了。

新建一個(gè)文件 application/controllers/Pages.php ,然后添加如下代碼。

<?php
class Pages extends CI_Controller {

    public function view($page = 'home')
    {
    }
}

你剛剛創(chuàng)建了一個(gè) Pages 類,有一個(gè)方法 view 并可接受一個(gè) $page 參數(shù)。 Pages 類繼承自 CI_Controller 類,這意味著它可以訪問(wèn)CI_Controller 類( system/core/Controller.php )中定義的方法和變量。

控制器將會(huì)成為你的 Web 應(yīng)用程序中的處理請(qǐng)求的核心,在關(guān)于 CodeIgniter 的技術(shù)討論中,這有時(shí)候被稱作 超級(jí)對(duì)象 。和其他的 PHP 類一樣,可以在 你的控制器中使用 $this 來(lái)訪問(wèn)它,通過(guò) $this 你就可以加載類庫(kù)、 視圖、以及針對(duì)框架的一般性操作。

現(xiàn)在,你已經(jīng)創(chuàng)建了你的第一個(gè)方法,是時(shí)候創(chuàng)建一些基本的頁(yè)面模板了,我們將 新建兩個(gè)視圖(頁(yè)面模板)分別作為我們的頁(yè)腳和頁(yè)頭。

新建頁(yè)頭文件 application/views/templates/header.php 并添加以下代碼:

<html>
    <head>
        <title>CodeIgniter Tutorial</title>
    </head>
    <body>

        <h1><?php echo $title; ?></h1>

頁(yè)頭包含了一些基本的 HTML 代碼,用于顯示頁(yè)面的主視圖之前的內(nèi)容。 另外,它還打印出了 $title 變量,這個(gè)我們后面講控制器的時(shí)候再講。 現(xiàn)在,再新建個(gè)頁(yè)腳文件 application/views/templates/footer.php ,然后添加以下代碼:

        <em>&copy; 2015</em>
    </body>
</html>

在控制器中添加邏輯

你剛剛新建了一個(gè)控制器,里面有一個(gè) view() 方法,這個(gè)方法接受一個(gè)參數(shù) 用于指定要加載的頁(yè)面,靜態(tài)頁(yè)面模板位于 application/views/pages/ 目錄。

在該目錄中,再新建兩個(gè)文件 home.php 和 about.php ,在每個(gè)文件里隨便 寫(xiě)點(diǎn)東西然后保存它們。如果你沒(méi)什么好寫(xiě)的,就寫(xiě) "Hello World!" 吧。

為了加載這些頁(yè)面,你需要先檢查下請(qǐng)求的頁(yè)面是否存在:

public function view($page = 'home')
{
    if ( ! file_exists(APPPATH.'/views/pages/'.$page.'.php'))
    {
        // Whoops, we don't have a page for that!
        show_404();
    }

    $data['title'] = ucfirst($page); // Capitalize the first letter

    $this->load->view('templates/header', $data);
    $this->load->view('pages/'.$page, $data);
    $this->load->view('templates/footer', $data);
}

當(dāng)請(qǐng)求的頁(yè)面存在,將包括頁(yè)面和頁(yè)腳一起被加載并顯示給用戶,如果不存在, 會(huì)顯示一個(gè) "404 Page not found" 錯(cuò)誤。

第一行檢查頁(yè)面是否存在,file_exists() 是個(gè)原生的 PHP 函數(shù),用于檢查某個(gè) 文件是否存在,show_404() 是個(gè) CodeIgniter 內(nèi)置的函數(shù),用來(lái)顯示一個(gè)默認(rèn)的 錯(cuò)誤頁(yè)面。

在頁(yè)頭文件中,$title 變量用來(lái)自定義頁(yè)面的標(biāo)題,它是在這個(gè)方法中賦值的, 但是注意的是并不是直接賦值給 title 變量,而是賦值給一個(gè) $data數(shù)組的 title 元素。

最后要做的是按順序加載所需的視圖,view() 方法的第二個(gè)參數(shù)用于向視圖傳遞參數(shù), $data 數(shù)組中的每一項(xiàng)將被賦值給一個(gè)變量,這個(gè)變量的名字就是數(shù)組的鍵值。 所以控制器中 $data['title'] 的值,就等于視圖中的 $title 的值。

路由

控制器現(xiàn)在開(kāi)始工作了!在你的瀏覽器中輸入 [your-site-url]index.php/pages/view 來(lái)查看你的頁(yè)面。當(dāng)你訪問(wèn) index.php/pages/view/about 時(shí)你將看到 about 頁(yè)面, 包括頁(yè)頭和頁(yè)腳。

使用自定義的路由規(guī)則,你可以將任意的 URI 映射到任意的控制器和方法上,從而打破 默認(rèn)的規(guī)則:

http://example.com/[controller-class]/[controller-method]/[arguments]

讓我們來(lái)試試。打開(kāi)文件 application/config/routes.php 然后添加如下兩行代碼, 并刪除掉其他對(duì) $route 數(shù)組賦值的代碼。

$route['default_controller'] = 'pages/view';
$route['(:any)'] = 'pages/view/$1';

CodeIgniter 從上到下讀取路由規(guī)則并將請(qǐng)求映射到第一個(gè)匹配的規(guī)則,每一個(gè)規(guī)則都是 一個(gè)正則表達(dá)式(左側(cè))映射到 一個(gè)控制器和方法(右側(cè))。當(dāng)有請(qǐng)求到來(lái)時(shí),CodeIgniter 首先查找能匹配的第一條規(guī)則,然后調(diào)用相應(yīng)的控制器和方法,可能還帶有參數(shù)。

你可以在關(guān)于 URI 路由的文檔 中找到更多信息。

這里,第二條規(guī)則中 $routes 數(shù)組使用了通配符 (:any) 可以匹配所有的請(qǐng)求, 然后將參數(shù)傳遞給 Pages 類的 view() 方法。

現(xiàn)在訪問(wèn) index.php/about 。路由規(guī)則是不是正確的將你帶到了控制器中的 view() 方法?實(shí)在是太棒了!

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)