實際上要本身實現一個MVC的應用也不難,咱們知道MVC裏面全部內容都必須通過控制器,因此如何把控制權交給控制器呢?php
咱們須要一個入口文件,入口文件負責將傳遞的請求交給對應的控制器,實際上也就是完成路由的功能。html
爲了學習的須要,能夠將路由的功能簡化,用戶經過GET方式將控制器的名和Action的名傳遞過來,入口文件接收到全部參數以後,按照以前約定的規則include某一個文件,而後實例化這個類,再調用這個類的相應方法。學習
01 <?php 02 $controller = empty($_GET['c']) ? 'Index' : trim($_GET['c']); //設置了默認的控制器 03 $action = empty($_GET['a']) ? 'index' : trim($_GET['a']); //設置了默認的Action 04 $controllerBasePath = dirname(__FILE__) . '/modules/controllers/'; 05 $controllerFilePath = $controllerBasePath . $controller . 'Controller.php'; 06 if(is_file($controllerFilePath)) { 07 include $controllerFilePath; 08 $controllerName = $controller . 'Controller'; 09 if(class_exists($controllerName)) { 10 $controllerHandler = new $controllerName(); 11 if(method_exists($controllerHandler,$action)) { 12 $controllerHandler->$action(); 13 } else { 14 echo 'the method does not exists'; 15 } 16 } else { 17 echo 'the class does not exists'; 18 } 19 } else { 20 echo 'controller not exists'; 21 }
|
看着代碼行數仍是挺多的哦,實際上實現的功能比較簡單,就是經過接受經過GET方式傳遞的控制器名和Action名,若是沒有傳遞,那麼調用默認的控制器名或者Action名,當用戶傳遞了控制器名和Action名以後可能會存在這樣一個問題,就是經過咱們以前約定的規則找不到相應的文件或者類或者方法,那麼咱們須要顯示友好的信息,而不是讓PHP拋出一系列的警告,這樣對於程序的健壯性頗有幫助。code
當有了控制器以後,一切都變得簡單了,對於模型,咱們能夠把它當作是一個普通的類,只是在功能上它負責業務邏輯的處理。htm
1 <?php 2 class IndexModel { 3 public function test() { 4 return 'Hello world!'; 5 } 6 }
做爲演示,咱們只是在這個模型裏面返回一個Hello World,那麼控制器怎麼使用這個模型呢,實際上也就是首先include這個文件,而後實例化類,調用相應的方法。路由
咱們如今修改控制器爲:io
01 <?php 02 class IndexController { 03 public function index() { 04 $modelPath = dirname(__FILE__) . '/../models/IndexModel.php'; 05 if(file_exists($modelPath)) { 06 include $modelPath; 07 $model = new IndexModel(); 08 echo $model->test(); 09 } else { 10 echo 'model does not exists'; 11 } 12 } 13 }
如今模型有了,那麼怎麼鏈接視圖呢?table
1 <html> 2 <head> 3 </head> 4 <body> 5 <p><?php if(isset($var1)) {echo $var1; } ?></p> 6 </body> 7 </html>
|
寫完視圖以後,怎麼經過控制器調用這個視圖呢?function
修改控制器至以下:class
01<?php 02 class IndexController { 03 public function index() { 04 $modelPath = dirname(__FILE__) . '/../models/IndexModel.php'; 05 if(file_exists($modelPath)) { 06 include $modelPath; 07 $model = new IndexModel(); 08 $var1 = $model->test(); 09 $viewPath = dirname(__FILE__) . '/../views/index.php'; 10 if(file_exists($viewPath)) { 11 include $viewPath; 12 } else { 13 echo 'view does not exists'; 14 } 15 } else { 16 echo 'model does not exists'; 17 } 18 } 19 } |