phpcms v9開源開發框架基礎mvc解讀
- 根據對mvc的瞭解
- 簡要寫個mvc框架 也談不上框架 但願對新手有幫助
- 簡單的解析下mvc 你能夠這樣瞭解 m模型也就是數據庫操做 v視圖 c控制器 經過url來判斷調用m和v來完成請求,自己沒數據庫操做。
- 根目錄(如今利用v9文件格式)
- index.php 入口文件
- | – api 接口文件目錄
- | – caches 緩存文件目錄
- | – configs 系統配置文件目錄
- | – caches_* 系統緩存目錄
- | – phpcms phpcms框架主目錄
- | – languages 框架語言包目錄
- | – libs 框架主類庫、主函數庫目錄
- | – model 框架數據庫模型目錄
- | – modules 框架模塊目錄
- | – templates 框架系統模板目錄
- | – base.php 框架主程序
- 首先根目錄新建一個index.php 編碼隨意 我這裏用utf-8
- 內容以下
- define('root',dirname(__file__).directory.seprartor);//根目錄
- include root.'phpcms/base.php'; //包含根目錄phpcms文件夾下面的base.php
- base:run(); //默認加載base類下面的靜態run方法。
- 下面是base.php //位於phpcms下面。
- 內容以下
- define('pc_path',dirname(__file__).directory.seprartor);//框架主目錄
- //其餘定義省略
- class base
- {
- //定義初始化方法
- public static function run()
- {
- echo '默認加載我';
- 自動載入app類
- base::load_sys_class('app'); app文件內容請看下面
-
- }
- //定義加載系統類的方法$classname類名稱,$path地址,$new是否初始化
- public static load_sys_class($classname,$path='',$new=1)
- {
- if($path=='') $path = 'libs/classes/'; //若是地址不存在 自動選擇到系統類文件夾下
- if(file_exists(pc_path.$path.$classname.'class.php')) //存在該文件
- {
- include pc_path.$path.$classname.'class.php'; //包含他
- if($new)
- {
- return new $classname; //初始化
- }
- else
- {
- return true;
- }
- }
- else
- {
- 文件不存在,請創建;或者直接 return false;
- }
- }
- }
- app.class.php 位於phpcms/lib/classes 系統類
- 內容以下
- class app
- {
- 首先定義一個構造函數 讓程序默認加載
- public function __construct()
- {
- echo '默認加載到這裏咯';//打開index。php就會看到這段話。
- //初始化一些值
- define('route_m',$_request['m'] ? $_request['m'] : 'content'); //若是有傳遞m就賦值 不然默認給個值
- define('route_c',$_request['c'] ? $_request['c'] : 'index'); //若是有傳遞c就賦值 不然默認給個值
- define('route_a',$_request['a'] ? $_request['a'] : 'init'); //若是有傳遞a就賦值 不然默認給個值
- $this->init();//默認執行
- }
- //如下兩個方法引用官方 本身寫也就和那個意思同樣 偷懶
- /**
- * 調用件事
- */
- private function init() {
- $controller = $this->load_controller();//這裏已是對象了
- if (method_exists($controller, route_a)) {
- if (preg_match('/^[_]/i', route_a)) {
- exit('you are visiting the action is to protect the private action');
- } else {
- call_user_func(array($controller, route_a)); //?index.php?m=content&c=index&a=init 默認url 主要判斷init是否存在index類裏面的一個方法 是的話就調用 這個就是c作的事情根據url來操做對應的m和a
- }
- } else {
- exit('action does not exist.');
- }
- }
- /**
- * 加載控制器
- * @param string $filename
- * @param string $m
- * @return obj
- */
- private function load_controller($filename = '', $m = '') {
- if (empty($filename)) $filename = route_c;
- if (empty($m)) $m = route_m;
- $filepath = pc_path.'modules'.directory_separator.$m.directory_separator.$filename.'.php'; //地址就是phpcms/modules/content/index.php 爲何是這個地址 由於是模塊開發
- if (file_exists($filepath)) {
- $classname = $filename;
- include $filepath;
-
- return new $classname; //返回new過的對象
- } else {
- exit('controller does not exist.');
- }
- }
- }
- 這樣打開index。php默認就運行的 phpcms/modules/content/index.php index類下面的init方面
- 下面看看他的內容怎麼寫
- class index
- {
- 設置一個鏈接數據庫屬性
- private $db = null;
- public function __construct()
- {
- 初始化一些值
- 寫一個鏈接數據庫的類mysql
- include 那個數據庫類;
- $this->db= new mysql();
- $this->db->connect('');鏈接數據庫 具體本身寫寫
- }
- //默認加載
- public function init()
- {
- echo '默認就加載到我這裏了';
- $result = $this->db->query('select * from v9_admin');
- while($res=$this->db->fetch($result))
- {
- print_r($res);
- }
- 而後
- include 模板文件 //
-
- 以上就是簡單的實現一些mvc。
- }
歡迎關注本站公眾號,獲取更多信息