close

如標題所說的,這是一個簡單的MVC架構演示。

首先,建立MVC目錄結構:以下包含了入口文件、控制器(Controller)、模型(Model)以及視圖(View)。

  • www 網站目錄
     
    • index.php 入口文件
      所有的訪問都要透過此入口文件來進行訪問,也是唯一一個讓瀏覽器直接請求的腳本文件。
      action 為控制器中的方法,瀏覽器透過 action 參數來決定請求的資料
       
    • controllers 控制器目錄
      控制器負責協調模型和視圖。
      • User_controller.php 使用者控制器
      • Article_controller.php 文章控制器
         
    • models 模型目錄
      模型負責提供、保存以及驗證數據
      • user_model.php 使用者模型
         
    • views 視圖目錄
      視圖只負責顯示、表單及收集用戶輸入的資料
      • user.php 使用者展示視圖

 

  1. 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 */

 

  1. 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 */

 

  1. 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 */

 

  1. 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 

MVC_sample01_2016-06-16.png


訪問文章控制器的 index 方法,顯示如下:

 http://192.168.1.2/www/index.php?c=Article&m=index 

MVC_sample02_2016-06-16.png


訪問文章控制器的 page 方法,顯示如下:

 http://192.168.1.2/www/index.php?c=Article&m=page

MVC_sample03_2016-06-16.png

 

報告完畢。

 

 

arrow
arrow
    全站熱搜

    Godspeed 發表在 痞客邦 留言(0) 人氣()