通過學習mvc能夠更深的了解一些mvc框架
mvc是乙個設計模式,它強制性的使應用程式的輸入、處理和輸出分開。使用mvc應用程式被分成三個核心部件:模型(m)、檢視(v)、控制器(c),它們各自處理自己的任務。
檢視:檢視是使用者看到並與之互動的介面。對老式的web應用程式來說,檢視就是由html元素組成的介面,在新式的web應用程式中,html依舊在檢視中扮演著重要的角色,但一些新的技術已層出不窮,它們包括adobe flash和象xhtml,xml/xsl,wml等一些標識語言和web services。如何處理應用程式的介面變得越來越有挑戰性。mvc乙個大的好處是它能為你的應用程式處理很多不同的檢視。在檢視中其實沒有真正的處理發生,不管這些資料是聯機儲存的還是乙個雇員列表,作為檢視來講,它只是作為一種輸出資料並允許使用者操縱的方式。
模型:模型表示企業資料和業務規則。在mvc的三個部件中,模型擁有最多的處理任務。例如它可能用象ejbs和coldfusion components這樣的構件物件來處理資料庫。被模型返回的資料是中立的,就是說模型與資料格式無關,這樣乙個模型能為多個檢視提供資料。由於應用於模型的**只需寫一次就可以被多個檢視重用,所以減少了**的重複性。
控制器:控制器接受使用者的輸入並呼叫模型和檢視去完成使用者的需求。所以當單擊web頁面中的超連結和傳送html表單時,控制器本身不輸出任何東西和做任何處理。它只是接收請求並決定呼叫哪個模型構件去處理請求,然後確定用哪個檢視來顯示模型處理返回的資料。
單一入口通常是指乙個專案或者應用具有乙個統一(但並不一定是唯一)的入口檔案,也就是說專案的所有功能操作都是通過這個入口檔案進行的,並且往往入口檔案是第一步被執行的。
單一入口的好處是專案整體比較規範,因為同乙個入口,往往其不同操作之間具有相同的規則。另外乙個方面就是單一入口帶來的好處是控制較為靈活,因為攔截方便了,類似如一些許可權控制、使用者登入方面的判斷和操作可以統一處理了。
或者有些人會擔心所有**都通過乙個入口檔案進行訪問,是否會造成太大的壓力,其實這是杞人憂天的想法。
現在我們總結mvc的處理過程,首先控制器接收使用者的請求,並決定應該呼叫哪個模型來進行處理,然後模型用業務邏輯來處理使用者的請求並返回資料,最後控制器用相應的檢視格式化模型返回的資料,並通過表示層呈現給使用者。
乙個典型的web mvc流程:
controller截獲使用者發出的請求;
controller呼叫model完成狀態的讀寫操作;
controller把資料傳遞給view;
view渲染最終結果並呈獻給使用者。
mysql的表名需小寫或小寫加下劃線,如:item,car_orders。
模組名(models)需用大駝峰命名法,即首字母大寫,並在名稱後新增model,如:itemmodel,carmodel。
控制器(controllers)需用大駝峰命名法,即首字母大寫,並在名稱後新增controller,如:itemcontroller,carcontroller。
方法名(action)需用小駝峰命名法,即首字母小寫,如:index,indexpost。
檢視(views)部署結構為控制器名/行為名,如:item/view.php,car/buy.php。
對於只有 php **的檔案,最好沒有結束標誌?>,
php自身並不需要結束符號,不加結束符讓程式更加安全,很大程度防止了末尾被注入額外的內容。
請求url
ocalhost/index.php?c=demo&a=index¶m=welcome
如果想得到更加優美的url結構,可以進行優化,為由這url結構優化與本文關係不大,以後進行分享。
從上面的引數可以看出,訪問的檔案是index.php,同時含有3個引數分別為c、a、param。
首先來實現乙個簡單的mvc
├─www # **根目錄
│ ├─controller # 控制器目錄
│ │ ├─democontroller.php # demo控制器
│ ├─model # 模型目錄
│ │ ├─model.php # model模型
│ ├─view # 檢視目錄
│ │ ├─index.php # index檢視
│ ├─index.php # 入口檔案
/index.php
<?php
require('controller/democontroller.php');
$controller = new democontroller();
$controller->index();
controller/democontroller.php
<?php
class democontroller
}
訪問127.0.0.1/index.php
如果使用下面的url進行訪問,可以預見不會有任何輸出。
訪問http://localhost/controller/democontroller.php
只能通過index.php來訪問,這也是為什麼稱它為入口檔案的原因
現在來通過引數來呼叫不同的控制器
接下來改寫index.php內容
<?php
$c_str = $_get['c']; // 獲取控制器
$c_name = $c_str.'controller';
$c_path = 'controller/'.$c_name.'.php';
$method = $_get['a']; //方法名
require($c_path);
$controller = new $c_name;
$controller->$method();
訪問
同樣能夠得到內容
接下來加入view,使用檢視物件處理輸出
}訪問 http://localhost/index.php?c=demo&a=index
上面貌似已經很cool了,但是顯示什麼樣的內容是在控制器中直接指定的,希望內容也由url指定,這樣將資料的處理交給模型來處理。
model/model.php
<?php
// model/model.php
class model
}
視**件model.php定義了乙個model類,類中定義了乙個getdata()的方法,用於返回請求的資料。
同時修改入口檔案index.php如下:
<?php
$c_str = $_get['c']; // 獲取控制器
$c_name = $c_str.'controller';
$c_path = 'controller/'.$c_name.'.php';
$method = $_get['a']; //方法名
require($c_path);
$param = $_get['param']; // 增加引數
$controller = new $c_name;
$controller->$method($param);
增加了乙個引數$param,將其作為控制器的方法呼叫引數。
還需要修改控制器的方法根據不同引數取得不同的資料。
// controller/democontroller.php
<?php
// controller/democontroller.php
class democontroller
}
訪問
成功~
PHP MVC框架路由學習筆記
提到php開發web,自然離不開開發框架,開發框架為我們提供了靈活的開發方式,mvc層分離,業務解耦等。第一篇先來簡單點的,說說mvc框架的路由功能。一般的單入口框架路由都是這樣的結構 domain index.php classname functionname var1 var2 這裡的inde...
選擇最好的PHP MVC開發框架
儘管在一些測試基準資料中,運用最快的開發框架比原生php 也要慢上很多。但是這些測試結果並不是實際生產環境資料的真實反映。事實上echo hello world 或者簡單的資料插入查詢的測試不具有實際意義。因為在實際使用中,即使是不使用框架,也總會建立一些輔助類庫,並在執行時載入,比如安全 日誌,而...
PHP MVC架構開發
mvc model view controller 是一種設計模式,組織的架構 php中mvc也稱web mvc 乙個典型的web mvc流程 controller擷取使用者發出的請求 controller呼叫movel完成狀態的讀寫操作 controller把資料傳遞給view view渲染最終結...