當前專案 中存在很多的模型檔案和控制器檔案,還有一些視**件
那麼如何訪問這些類以及檔案呢?
當前的方法時,通過瀏覽器訪問index.php,然後在此檔案中 ,建立需要的控制器類的物件,再呼叫此類的方法
require_once './controller/userscontroller.class.php';
$c=new userscontroller();
$c->select();
那麼如果要訪問newscontroller中的select方法怎麼辦呢?
修改index.php
require_once './controller/newscontroller.class.php';
$c=new newscontroller();
$c->select();
訪問newscontroller中的 add 方法呢?
還要無限制的修改下去嗎?
當然不是!
我們將主動權交給使用者,使用者告訴index.php想要訪問哪個控制器和哪個方法,index.php就例項化對應的類,並呼叫對應的方法,而不是像上面那樣將控制器名稱與方法名稱寫死
修改index.php **如下
//獲取使用者請求的控制器名稱(不帶controller字尾)
$c=$_get['c'];
//獲取使用者請求的方法名稱(不帶action字尾)
$a=$_get['a'];
//為類名新增controller字尾
$classname=$c."controller";
//為方法名稱新增action字尾
$actionname=$a."action";
echo $classname;
echo '
';echo $actionname;
然後在瀏覽器中輸入如下位址,在index.php後面傳遞引數
總結1)為了輸入方便,請求控制器和方法時無需輸入字尾,index.php獲取後再拼接完整類名和方法名稱
2)輸入的控制器名稱和方法名稱都是小寫,實際的型別和方法名稱是既有大寫,也有小寫,但是php對於類名和方法名稱是不區分大小寫的,所以這麼些也可以
下面繼續修改index.php **,做到自動例項化控制器類,並呼叫請求的方法名稱
在上面**的基礎上追加如下**
//引入控制器所在的檔案
require_once './controller/'.$classname.'.class.php';
//建立物件
$controller_name=new $classname();
$controller_name->$actionname();
瀏覽器中輸入如下位址訪問
如果像訪問其他控制器和方法,只需要更換上面引數 c 和 a 的值即可
總結:通過瀏覽器訪問index.php,php再根據使用者的請求呼叫對應的控制器和方法。這個index.php 就是我們這個程式的訪問入口,此檔案就叫做入口檔案
如果使用者在位址列輸入如下位址,則會報錯
原因在於沒有傳遞引數c和引數a
index.php 在執行如下**時獲取的就是 null,導致index.php 不知道要獲取哪個控制器
解決方案就是,如果使用者沒有傳遞引數c或者a,就為其設定乙個預設值
如下**
//獲取使用者請求的控制器名稱(不帶controller字尾)
$c=isset($_get['c'])?$_get['c']:'users';
//獲取使用者請求的方法名稱(不帶action字尾)
$a=isset($_get['a'])?$_get['a']:'select';
這樣,再輸入如下位址訪問時
此種方法正好解決了我們設定**預設訪問頁面的問題
MVC框架入口檔案的解析
1.首先要先把我們的框架的目錄定義好 2.然後呢,我們需要做的就是規格入口檔案 則是通過偽靜態檔案 htaccess mod rewrite.c 開啟rerite 功能rewriteengine on 如果請求的是真實存在的檔案或目錄,直接訪問 rewritecond f 如果訪問的檔案或目錄不是真...
自定義MVC框架
第一步 用乙個容器 或者servlet類 filter類 接受請求 一般在web.xml中進行配置,攔截請求到actionservlet 控制servlet 中。第二步 分割請求路徑 得到請求訪問類以及訪問方法的標示字串 解析請求的url路徑,讀取配置檔案。第三步 通過字串獲得action類物件以及...
自定義MVC框架
mvc全名是model 模型 view 檢視 controller 控制器 的縮寫。是一種軟體設計典範,用一種業務邏輯 資料 介面顯示分離的方法組織 v jsp 表現層 c servlet action m 實體域模型 名詞 實體類 過程域模型 動詞,如實體類要做curd dao方法 注意 由上而下...