php 搭建mvc框架

    這是一個最小化的Php mvc項目,如下經過對項目結構的分析,說明php中搭建mvc框架的最基本思路。php

 

1.MVC項目結構

目錄結構以下:html

/application      應用程序目錄mysql

         /model      模型類目錄web

         /view         視圖類目錄sql

         /controller   控制器類目錄數據庫

/framework      框架代碼目錄mvc

         /Model.class.php     基礎模型類app

         /MySQLDB.class.php  數據庫的操做類框架

/index.php       入口文件fetch

 

項目文件結構圖以下:

 

2.framework (基礎框架目錄)

2.1 MySQLDB.class.php

         mysql數據庫操做類,構造方法中初始化了相關的參數,數據庫鏈接等。同時在該類中並封裝link(),selectDB(),query(),fetchAll(),fetchRow()等操做數據庫的基本方法(後續可作進一步擴展)。

 

          /**

          * 構造方法

          *

          * @param $params array 須要初始化的數據集合!

          */

         public function __construct($params=array()) {

                   $this->host = isset($params['host']) ? $params['host'] : '127.0.0.1';

                   $this->port = isset($params['port']) ? $params['port'] : '3306';

                   $this->user = isset($params['user']) ? $params['user'] : 'root';

                   $this->pass = isset($params['pass']) ? $params['pass'] : '';

                   $this->charset = isset($params['charset']) ? $params['charset'] : 'utf8';

                   //若是默認數據庫爲空字符串,表示用戶沒有選擇默認數據,意味着不須要執行use dbname!

                   $this->dbname = isset($params['dbname']) ? $params['dbname'] : '';

 

                   //鏈接數據庫

                   $this->link();

                   //設置字符集

                   $this->setCharset();

                   //選擇默認數據庫

                   $this->selectDB();

         }

2.2 Model.class.php

基礎模型類:全部模型類的基類,構造方法中初始化MySQLDB類的對象,並賦值給成員$db

 

<?php

/**

 * 基礎模型類

 */

class Model {

         protected $db;//初始化MySQLDB類的對象  

         public function __construct() {

                   //初始化數據庫操做對象

                   $this->initDB();

         } 

         protected function initDB() {

                   //引入mysqldb類

                   require './framework/MySQLDB.class.php';

                   //實例化對象

                   $this->db = new MySQLDB(array('pass'=>'1234abcd', 'dbname'=>'itcast'));

         }

}

 

3.application (應用程序目錄)

3.1 Model 模型

該文件夾包含如下模型類文件:

MatchModel.class.php

StudentModel.class.php

 

以StudentModel爲例,提供了getList()方法,返回全部學生數據。(方法可按須要擴展)

因爲繼承自Model類,而基礎的功能在MySQLDB類和Model類中已作了封裝,所以這裏的查詢代碼很是簡潔。

 

<?php

require './framework/Model.class.php';

class StudentModel extends Model {

 

         public function getList() {

                   return $this->db->fetchAll('select * from student');

         }

}

 

3.2 View  視圖

該文件夾包含如下視圖文件:

match_list.html

student_list.html

 

以student_list.html爲例,將$list中的數據進行展現,php代碼主要是展現數據的須要,不處理業務邏輯。

 

這裏的代碼是做爲模版(template),由控制器須要時進行調用的。

 

<h1>學生列表</h1>

<?php foreach($list as $row) :?>

         <?php echo $row['stu_name'];?>,

         <?php echo $row['gender'];?>,

         <br>

<?php endForeach;?>

 

3.3 Contrllor 控制器

該文件夾包含如下控制器類文件:

MatchController.class.php

StudentController.class.php

 

以StudentController爲例,提供了相關Action的方法。如listAction()經過載入StudentModel.class.php文件,建立StudentModel類的對象來操做數據庫,獲得學生信息。而後調用學生列表視圖模版,展現頁面。

控制器類中的方法是提供給入口文件(Index.php)調用的,由於全部的請求都是向單一的入口文件Index.php發起。

 

<?php

class StudentController {

         public function listAction() {

                   //載入學生模型

                   require './application/model/StudentModel.class.php';

                   $model_student = new StudentModel;

                   //獲得學生列表數據

                   $list = $model_student->getList();

       

                   //調用一個學生列表視圖模板,展現頁面

                   require './application/view/student_list.html';

         }

}

 

4.Index.php (單一入口文件)

單一入口文件:根據請求參數,建立控制器對象,執行所請求的Action對應的方法.

 

<?php

/**

 *入口文件

*/

//根據請求c參數,肯定當前的控制器類標識

$c = isset($_GET['c']) ? $_GET['c'] : 'Match';

//載入控制器類文件,獲得控制器類對象

$controller_name = $c . 'Controller';

require './application/controller/' . $controller_name . '.class.php';

$controller = new $controller_name;//可變類名

 

//根據請求a參數,肯定當前的Action標識

$a = isset($_GET['a']) ? $_GET['a'] : 'list';

//獲得當前的方法

$action_name = $a . 'Action';//拼湊方法名

 

//調用

$controller->$action_name();//可變方法名

 

上一篇:php基礎(三):php進行web開發

相關文章
相關標籤/搜索