如標題所說的,這是一個簡單的MVC架構演示。
首先,建立MVC目錄結構:以下包含了入口文件、控制器(Controller)、模型(Model)以及視圖(View)。
- www 網站目錄
- index.php 入口文件
所有的訪問都要透過此入口文件來進行訪問,也是唯一一個讓瀏覽器直接請求的腳本文件。
action 為控制器中的方法,瀏覽器透過 action 參數來決定請求的資料
- controllers 控制器目錄
控制器負責協調模型和視圖。- User_controller.php 使用者控制器
- Article_controller.php 文章控制器
- models 模型目錄
模型負責提供、保存以及驗證數據- user_model.php 使用者模型
- user_model.php 使用者模型
- views 視圖目錄
視圖只負責顯示、表單及收集用戶輸入的資料- user.php 使用者展示視圖
- index.php 入口文件
- index.php 入口文件
<?php
header("Content-Type:text/html; charset=utf-8");
// 這是一個入口文件 index,所有的訪問都要透過此入口文件來進行訪問
// 例:192.168.1.2/index.php?c=控制器&m=方法名
// 1. 取得控制器,透過參數 $_GET['c'] 決定要取得的控制器是哪一個
$controllerName = $_GET['c']; // 例:User
// 2. 將控制器 include 進來
include './controllers/' . $controllerName. '_controller.php';
// 3. 實體化一個控制器對象
$className = $controllerName. '_controller'; // 透過參數 $_GET['c'] 取得控制器中的 className
$controllerObj = new $className();// 體實化控制器對象
// 4. 取得方法
// 透過參數 $_GET['m'] 取得欲調用的方法名稱
$methodName = $_GET['m']; // 例:index
// 5. 調用控制器中的方法
$controllerObj->$methodName();
/* End of file index.php */
- controllers/User_controller.php 使用者控制器
<?php
// 控制器 controller 負責調用模型 model 和視圖 view
class User_controller {
public function index() {
// 1. 呼叫 controllers 的 index 方法
// echo '這是 User 控制器的 index 方法';
// 2. 調用 models
// 將 model 文件包含進來
include './models/user_model.php';
// 3. 實體化模型,用來獲取數據
$model = new user_model();
// 4. 通過模型獲取數據
$list = $model->get_all_user();
// 5. 調用視圖模板來顯示數據
include './views/user.php';
}
}
/* End of file User_controller.php */
controllers/Article_controller.php 文章控制器
<?php
class Article_controller {
public function index() {
echo '這是 Article 控制器的 index 方法';
}
public function page() {
echo '這是 Article 控制器的 page 方法';
}
}
/* End of file Article_controller.php */
- models/user_model.php 使用者模型
<?php
class user_model {
// 模型負責提供、保存以及驗證數據
// 模擬由資料庫中取得所有使用者資料,並回傳。
public function get_all_user() {
$list = array(
array('id' => 1, 'name' => 'jack', 'email' => 'jack@gmail.com'),
array('id' => 2, 'name' => 'rose', 'email' => 'rose@gmail.com'),
array('id' => 3, 'name' => 'peter', 'email' => 'peter@gmail.com')
);
return $list;
}
}
/* End of file user_mode.php */
- views/user.php 視圖/模板
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>這是一個 user 視圖</title>
</head>
<body>
<h3>視圖只負責顯示、表單及收集用戶輸入的資料</h3>
這是一個 User 控制器的 index 方法的視圖<br>
在控制器中load視圖,並將資料帶給視圖呈現<br>
視圖決定了資料呈現的模式<br>
<ul>
<?php
//var_dump($list);
foreach ($list as $v1):
echo '<li><ul>';
foreach ($v1 as $key => $value):
echo sprintf('<li>%s = %s</li>', $key, $value);
endforeach;
echo '</ul></li>';
endforeach;
?>
</ul>
</body>
</html>
檔案放到網頁伺服器上後,便可使用 http://192.168.1.2/www/index.php?c=User&m=index 進行訪問
由入口文件 index.php 進行訪問,透過參數 c 調用控制器,參數 m 調用控制器中的方法,方法則負責調用 model 和 view
訪問文章控制器的 index 方法,顯示如下:
http://192.168.1.2/www/index.php?c=Article&m=index
訪問文章控制器的 page 方法,顯示如下:
http://192.168.1.2/www/index.php?c=Article&m=page
報告完畢。
留言列表