框架這個概念可能一開始就嚇壞了不少PHP的Coder,其實你只要把一個Framework想明白了,其實也沒啥,只是別人功能更復雜,細節考慮的更多,代碼質量更高。php
框架最重要的一個文件爲入口文件,基本上至關於一個總控開關,全部的請求都須要通過這個文件:html
1 <?php 2 define('APP_PATH',dirname(__FILE__).'/..'); //應用路徑 3 include APP_PATH.'/Library/Toper/Core/FrontController.class.php';//導入前端控制器 4 $frontController = Tp_FrontController::getInstance(); 5 $frontController->run();
這個文件能夠只作一件事情,那就是將控制權交給框架。前端
你們都知道,一個MVC的應用,全部的請求都必須通過控制器,因此下面咱們來編寫一個比較簡單的控制器:瀏覽器
1 <?php 2 class Test_IndexController extends Tp_Controller { 3 public function indexAction() { 4 echo 'a'; 5 } 6 }
這個類只須要繼承自Tp_Controller便可,Tp_Controller是Toper的控制器的基類,只要你繼承它,你就可使用框架幫你寫好的一系列方法,這樣就能夠大大減小你本身的工做量了,而且按照規範,函數名也是有意義的,如剛纔寫的這個函數表明的意義就是訪問Test模塊IndexContrller這個控制器下面的index這個Action。框架
那麼如何使用模型呢?實際上很是簡單。函數
1 <?php 2 class Test_IndexModel extends Tp_Model { 3 public function test() { 4 return 'test'; 5 } 6 }
那麼編寫模型以後怎麼在控制器中調用呢,其實方法就是在控制器中實例化這個模型類,而後調用相應的方法便可,因此修改剛纔這個控制器的類: 原理和控制器同樣,也是繼承框架的類,而後自定義方法,這個地方的方法名沒有限制,能夠隨意。this
1 <?php 2 class Test_IndexController extends Tp_Controller { 3 public function indexAction() { 4 $model = new Test_IndexModel(); 5 echo $model->test(); 6 } 7 }
爲何沒有include語句?命令行
那是由於框架幫你作完了這一切,固然,框架不是萬能的,當你比較熟悉以後,也能夠選擇不使用自動導入。code
剛纔咱們所作的一切都沒有View,那麼怎麼編寫View呢,實際上就是一個HTML文件,框架在View這一層通常是實現標籤庫,標籤庫幫你完成一些原來須要用PHP代碼才能完成的事情,好比循環遍歷,沒有標籤庫可能你就只能在這個View的文件中使用<?php foreach(.....) ?>,這樣對於代碼分離很很差。htm
若是你對標籤庫沒有概念,那麼你直接看下面的代碼吧!
1 <html> 2 <head> 3 <title>test</title> 4 </head> 5 <body> 6 <print name = "Hello world!" type = "str" /> 7 </body> 8 </html>
這是一段沒有什麼難度的代碼,惟一的難度可能就是這個print標籤,這個標籤是框架定義的,它的功能很簡單,就是打印一個字符串,你可能以爲這樣沒什麼意義,由於我使用PHP代碼也能夠很輕易的完成這個功能,可是你想像一下一個作前端的爲何還須要懂PHP呢,若是使用標籤庫,那麼前端開發人員就能夠像使用HTML標籤同樣操做數據了。
咱們知道全部的請求都必需要經過控制器,因此外部是沒法直接訪問這個視圖文件的,因此又須要修改控制器的代碼了!!!
1 <?php 2 class Test_IndexController extends Tp_Controller { 3 public function indexAction() { 4 $model = new Test_IndexModel(); 5 echo $model->test(); 6 $this->_display('Test.test'); 7 } 8 }
若是你學過smarty,你可能對display方法很熟悉,實際上這個函數的功能就是顯示一個模板文件!!!
好了,一個基本的MVC應用就搭起來了,不是很難吧!!!
如何查看效果呢,有兩種方式:
1.CGI:
打開瀏覽器,瀏覽器訪問時,若是您的域名是:localhost/testframework,那麼您可使用localhost/testframework/Public/index.php/Test/Index/index來訪問,若是您設置了虛擬主機,如www.a.com,那麼只須要使用www.a.com/Test/Index/index就能夠訪問了;
2.CLI:
經過命令行直接執行PHP腳本時,在Public目錄下面使用php index.php m:test c:Index a:index。