mvc載入控制器、模型類以及檢視類編寫
阿新 • • 發佈:2019-02-14
一、載入控制器
1)首先我們要建立一個app的資料夾在建立一個控制器的資料夾在裡面建立一個index的控制器 由於類名和方法名重複的時候會使方法成為一個初始化的方法 那麼解決的辦法是將類名後面加一個Controller,這樣就能避免發生類似的問題 如下:
2)然後我們在載入控制器的編碼部分 首先我們用一個變數存放我們對應的控制器 然後再判斷控制器是否存在(在拼接的時候一定要看清路徑不然會報錯誤),當然我們需要引用前面的route類
3)如果控制器存在我們將include進來 然後例項化拼接控制器的路徑 執行以下看看是否錯誤 (如果錯誤基本上都是拼接路徑上出錯了)沒有錯的話我們可以將例項化的內容起一個變數名,然後使用變數名中對應的方法;
$route = new \core\lib\route();
$controller = $route->ctrl;
$action = $route->action;
$ctrlFile = APP.'/controller/'.$controller.'Controller.php';
$ctrlClass = '\\'.MODULE.'\controller\\'.$controller.'Controller';
if (is_file($ctrlFile)) {
include $ctrlFile;
$ctrl = new $ctrlClass();
$ctrl->$action();
} else {
throw new \Exception("找不到次控制器",$controller);
}
二、模型類
1)首先我們要將控制器來連結我們的資料庫 我們先要建立一個model類 我們要將這個model類來繼承PDO這樣它就有自帶的方法了 然後我們要寫一個初始化的方法 在初始化的方法當中連結我們的資料庫,我們來模擬一下連結資料庫
<?php
namespace core\lib;
use \core\lib\conf;
class model extends \PDO{
public function __construct(){
// $dsn = 'mysql:host=localhost;dbname=ltyhose';
// $username = 'root';
// $passwd = 'root';
$temp = conf::all('database');
var_dump($temp);
try {
parent::__construct($temp['DSN'],$temp['USERNAME'],$temp['PASSWD']);
} catch (\PDOException $e) {
var_dump($e->getMessage());
}
}
}
這裡面也是將資料庫需要的引數從配置中讀取,註釋的是可以直接寫死,也可以出來。
2)在控制器中例項化這個model類 然後測試的寫一個select查詢語句然後用例項化的model類執行sql語句進行輸出輸出結果說明我們建立的模型已經完成;
public function index(){
$sql = "select *from 表明";
$model = new \core\lib\model();
$res = $model->query($sql);
var_dump($res->fetchAll());
}
這樣出來的結果就是我們所查詢出來的陣列
三、檢視類
1)首先我們要在控制器中定義一個我們想要的方法來進行檢視層的傳資料與顯示檢視層,例如:
$this->assign('title',$title);//assign可以自己定義
$this->assign('data',$data);
$this->display('index.html');//顯示檢視層
2)之後我們需要讓控制器繼承這個mvc.php如下圖:
3)我們在mvc.php中增加以下兩個方法:
/**
* [assign description]
* @param [type] $name [變數名]
* @param [type] $value [變數值]
*/
public function assign($name,$value){
$this->assign[$name] = $value;
}
/**
* [display description]
* @param [type] $file [檔名]
*/
public function display($file){
$file = APP.'/views/'.$file;
if (is_file($file)) {
extract($this->assign);//將陣列打散
include $file;
}
}
然後就可以執行了。