視圖是一個簡單的 Web 頁面,或者頁面的部分,如頁頭,頁尾,側邊欄等等。實際上,如果你需要這種樹狀類型,視圖可以靈活的嵌入到其他視圖(或者再嵌入其他視圖)。
視圖從不會被直接調用,必須通過控制器來調用。記住,在 MVC 架構中,控制器扮演了交通警察的角色,那么它就得負責取回一個特殊視圖。如果你沒有閱讀過控制器文檔,那么你需要先閱讀一下。
使用之前創(chuàng)建的控制頁面,并加入一個視圖。
使用你的文本編輯器,創(chuàng)建一個 blogview.php 文件,并輸入:
<html>
<head>
<title>My Blog</title>
</head>
<body>
<h1>Welcome to my Blog!</h1>
</body>
</html>
并保存到 application/views/ 文件夾。
加載一個特點的視圖文件,需要使用以下方法:
$this->load->view('name');
上面的 name 就是你的視圖文件。
注意: .php 后綴名不用特別指定,除非你使用了非 .php 的文件。
現(xiàn)在,打開之前你創(chuàng)建的 Blog.php,使用視圖加載方法覆蓋 echo 語句。
<?php
class Blog extends CI_Controller {
public function index()
{
$this->load->view('blogview');
}
}
如果你使用之前的 URL 瀏覽網站,你將會看到你的新視圖,URL 與下面類似:
example.com/index.php/blog/
CodeIgniter 將會智能的處理多個從控制器發(fā)起的 $this->load->view()
調用。如果超過一個調用,它們將會合并到一起。例如,你可能希望有一個頁頭視圖,菜單視圖,內容視圖,頁腳視圖。它可能長成這樣:
<?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');
}
}
上述的列子中,我們使用動態(tài)添加數(shù)據(jù)方法,稍后你將會看到。
如果你想讓文件系統(tǒng)更有組織性,可以使用子文件夾來保存視圖。當你載入視圖的時候,必須帶有子文件夾名。
$this->load->view('directory_name/file_name');
控制器將數(shù)組或者對象作為第二個參數(shù)傳遞給視圖加載方法。底下是使用數(shù)組的例子:
$data = array(
'title' => 'My Title',
'heading' => 'My Heading',
'message' => 'My Message'
);
$this->load->view('blogview', $data);
這個是使用對象作為參數(shù):
$data = new Someclass();
$this->load->view('blogview', $data);
注意:如果你使用一個對象,類變量將會變?yōu)閿?shù)組元素。
讓我們使用控制器文件試試,打開它并添加以下代碼:
<?php
class Blog extends CI_Controller {
public function index()
{
$data['title'] = "My Real Title";
$data['heading'] = "My Real Heading";
$this->load->view('blogview', $data);
}
}
現(xiàn)在打開你的視圖文件,將文本改為和數(shù)組 key 對應的變量:
<html>
<head>
<title><?php echo $title;?></title>
</head>
<body>
<h1><?php echo $heading;?></h1>
</body>
</html>
接著使用之前的 URL 加載頁面,你將看到變量已經替換。
你傳給視圖的變量,不僅是一個簡單變量。你也可以傳遞多維數(shù)組,他可以循環(huán)生成多行。例如,如果你從你的數(shù)據(jù)庫里獲取數(shù)據(jù),它既是典型的多維數(shù)組。
這里有一個簡單的例子,添加到你的控制器:
<?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);
}
}
現(xiàn)在打開你的視圖文件,并創(chuàng)建循環(huán):
<html>
<head>
<title><?php echo $title;?></title>
</head>
<body>
<h1><?php echo $heading;?></h1>
<h3>My Todo List</h3>
<ul>
<?php foreach ($todo_list as $item):?>
<li><?php echo $item;?></li>
<?php endforeach;?>
</ul>
</body>
</html>
注意:你也許已經注意到了,上面的例子我們使用了 PHP 的替代語法。如果你不熟悉可以閱讀 alternative_php
文檔.
view 函數(shù)第三個可選參數(shù)可以改變函數(shù)的行為,讓數(shù)據(jù)作為字符串返回而不是發(fā)送到瀏覽器。如果你想用其他方法處理數(shù)據(jù),這會很有用。如果你將參數(shù)設置為 TRUE (boolean),它將會返回數(shù)據(jù)。默認為 false,這樣會發(fā)送給瀏覽器。如果你想要返回數(shù)據(jù),記得將他賦值給變量。
$string = $this->load->view('myfile', '', TRUE);