自定義MVC框架 入口檔案

2021-09-05 01:27:50 字數 2267 閱讀 3209

當前專案 中存在很多的模型檔案和控制器檔案,還有一些視**件

那麼如何訪問這些類以及檔案呢?

當前的方法時,通過瀏覽器訪問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方法 注意 由上而下...