雲端教學課程


PHP MVC




先到的同學先把WAMP、Navicat 安裝起來。

Navicat 在 2804-01 / 2804-03 / 2804-08 / 

MVC 概念


在開始之前,先同步程式碼



有帶上週檔案的可以把資料庫匯進去,
或是下載已經整理好的版本。



  1. 把程式解壓縮到  C:\wamp\www\  資料夾裡。
  2. 新增blog資料庫,再把 blog.sql 倒入。

開始拆程式碼

Model

  1. 建立一個model資料夾。
  2. 在裡面建立 message.php。
  3. 將所有function都移進去。
  4. 測試 - 在require 'config.php'; 後新增一行
    require 'model\message.php';
    把要用到的function包進來。

繼續拆程式碼

View

  1. 建立一個View資料夾。
  2. 把HTML輸出的部份各別放進去。
  3. 在處理完資料後,把View給require進來。

<?php
require 'config.php';
require 'model/message.php';
$new_message_id = new_message( $db ,
                    $_POST['messager'] ,
                    $_POST['message']
                   );
require 'view/message_add.php';

其實 controller 已經出來了

Countroller 負責接收要求,
再引入所需要的Model來處理資料,
最後,再交給對應的View來輸出。

整理程式碼

把Controller合併

  1. 用GET的參數來控制Controller狀態
    1. action=list
    2. action=add
    3. action=delete
  2. 判斷完後再引入需要的模組後交給View去顯示。
  3. 新增一個 index.php 做為 Controller。

整理程式碼

把Controller合併
 <?php
require 'config.php';
require 'model/message.php';
if( isset( $_GET['action'] ) ){
	switch($_GET['action']){
		case 'list': //message.php
			break;
			
		case 'add' : //message_add.php
			break;
			
		case 'delete' : //message_delete.php
			break;
			
		default : //建立一個錯誤頁面,顯示"找不到頁面!"。
			require 'view/error.php';
	}}else{
	require 'view/error.php';
}

整理程式碼

把資料流串起來 - "view\message.php"
原始程式碼
<form action="message_delete.php" method="post">
修改成
<form action="?action=delete" method="post">

原始程式碼
<form action="message_add.php" method="post">
修改成
<form action="?action=add" method="post">

整理程式碼

整理 Model,並加上註解
<?php
class message{
  /**
   * 初始化message物件並連結db
   * 
   * @param PDO $db
   * @return void
   */
  function __construct( PDO $db){
    $this->db = $db;
  }	  /**
   * 回傳留言版內所有留言
   * 
   * @param 無
   * @return array('rows'=>所有留言內容,'rowcount'=>留言數量)
   */
  function getData() {
    $db = $this->db;
    ...
  }
  ...
}

整理程式碼

修改Controller
<?php
require 'config.php';
require 'model/message.php';
if( isset( $_GET['action'] ) ){

	$message = new message($db); //新增message物件
	switch($_GET['action']){
		case 'list':
			$data = $message->getData(); //呼叫方法
			require 'view/message.php';
			break;
		...
		default :
			require 'view/error.php';
	}
}else{
	require 'view/error.php';
}

進階MVC

每個Framework的MVC方式都不同,
理念都是讓程式碼好修改、管理。

View的部份有些OpenSource會使用Smarty來處理。
$smarty->assign('best_goods', get_recommend_goods('best'));// 推薦商品$smarty->assign('new_goods', get_recommend_goods('new'));// 最新商品$smarty->assign('hot_goods', get_recommend_goods('hot'));// 熱門文章
接下來,我們來把留言版加上會員登入功能。
讓我們繼續寫下去...

PHP-MVC

By jackai

PHP-MVC

  • 3,125