怎么創(chuàng)建mvc項目,mvc框架怎么建立
chanong
重頭戲即將來臨
【路由分發(fā)】我去了上一章
開始創(chuàng)建您的第一個MVC 框架項目[1]
現(xiàn)在我們已經(jīng)解釋了項目的基本結(jié)構(gòu),現(xiàn)在我們將解釋重點“路由的分發(fā)”。路由的目的是通過入口文件調(diào)用不同類的不同方法。那么我們現(xiàn)在就開始吧!
1. 接受URL參數(shù)(p平臺參數(shù)、C控制器名稱、方法名稱)。 2. 使用平臺參數(shù)(p)+控制器名稱(c)創(chuàng)建對象并調(diào)用方法。談話是廉價的。請給我看代碼。讓我們現(xiàn)在開始。代碼
[代碼] 在Core/App.php中創(chuàng)建一個getUrl靜態(tài)方法。每次創(chuàng)建方法時,請務必在run 方法中調(diào)用它。
* 獲取URL,做人性化大小寫,設(shè)置默認值*/public static function getUrl(){ $GLOBALS['p']=isset($_GET['p']) ucfirst(strto lower($_GET [ ' p'])) :'返回'; $GLOBALS['c']=isset($_GET['c']) ucfirst(strto lower($_GET['c'])) :' $GLOBALS [ 'a ']=isset($_GET['a']) ucfirst(strto lower($_GET['a'])) :'showIndex';} 實例化上面定義的對象根據(jù)URL調(diào)用方法。
* 分發(fā)路由實例化對象并根據(jù)URL調(diào)用方法。 */public static function dispathRouter(){ //控制器規(guī)則為名稱+ 控制器關(guān)鍵字$className='App\\'.$GLOBALS[' p'] .'\\Controller\\'.$GLOBALS[' c'] .'Controller'; $action=$GLOBALS['a']; $obj=new $className; $obj-$action();為什么我實際執(zhí)行的時候會出現(xiàn)錯誤,檢查一下可以看到?jīng)]有class文件從頭到尾都引入了除App.php之外的其他類,因此一旦運行上面的代碼,就會顯示一條消息,表明不存在該類。也就是說,重要的部分仍然缺失
[Autoload]/** *Autoload*/public static function autoload(){ //這里采用高階函數(shù)的寫法,只留下一個方法spl_autoload_register(function($className){$fileName=ROOT_PATH.str_replace ( ' \\ ','/',$className).'.php';if (file_exists($fileName)){ include_once $fileName; return true;}else{ echo '文件不存在!'; die;}Up 所以我們使用高階函數(shù),但是什么是高階函數(shù)呢?這里我們來說說通用函數(shù),通用函數(shù)的參數(shù)是什么?
String 2. Array 3. Object 高階函數(shù)參數(shù)是可以將整個函數(shù)體作為參數(shù)的函數(shù)App/Back/Controller php/** * 不要忘記在* IndexController.php 中創(chuàng)建IndexController.php * User: kalvin * Date: 2018/1/30 * Time: PM 3:23 */namespace App\Back\Controller;class IndexController{ public function showIndex() { }} 這樣基本上就可以創(chuàng)建一個原型了
[Smarty] 讓我們在您的項目中支持Smarty模板引擎
解壓并將整個Smarty libs 文件夾復制到項目的Vendor 目錄中,并將其重命名為Smarty。修改core/App.php自動加載Smarty [代碼]/** * Autoload */public static function autoload( ) { //這里采用高階函數(shù)的寫法, spl_autoload_register(function($className){if ( $className=='Smarty'){ $fileName=VEND_PATH.'Smarty/'.str_replace( ' \\','/',$className).'.class.php' ;}else{ $fileName=ROOT_PATH.str_replace ('\\','/',$className).'.php';}if ( file_exists($fileName)){ include_once $fileName; return true;}else{ echo '文件不存在!'; die; } });}接下來,在Core中創(chuàng)建Controller.php,并讓該類繼承自\Smarty。
php/** * * Controller.php * User: kalvin * Date: 2018/1/30 * Time: PM 3:32 */namespace Core; class Controller extends \Smarty{} 以后需要使用App目錄下的Smarty所有類必須繼承自控制器
php/** * * IndexController.class.php * User: kalvin * Date: 2018/1/30 * Time: PM3:23 */namespace App\Back\Controller;use Core\Controller;class IndexController extends Controller{ public function showIndex() { }它還沒有完成。開始配置Smarty模板路徑和編譯路徑。核心控制器
php/** * * Controller.php * User: kalvin * Date: 2018/1/30 * Time: PM 3:32 */namespace Core; class Controller extends \Smarty{ public function __construct() {parent:__construct(); $templateDir=APP_PATH.$ GLOBALS['p'].'/'.'View';$this-template_dir=$templateDir;$this-compile_dir=ROOT_PATH.'Caching/'; }}我正在使用的Smarty 3已經(jīng)放棄了setTemplateDir方法看起來只有一個template_dir 屬性,您可以在視圖中創(chuàng)建模板并使用display 來訪問IndexController 中的模板。
php/** * * IndexController.class.php * User: kalvin * Date: 2018/1/30 * Time: PM3:23 */namespace App\Back\Controller;use Core\Controller;class IndexController extends Controller{ public function showIndex() { $ this-display('hello.tpl'); }} 如果您發(fā)現(xiàn)我的文章有用或喜歡它,請不要忘記關(guān)注我。如果您喜歡,請轉(zhuǎn)發(fā)。當然,如果可以的話我就給你奶茶錢作為獎勵,你也可以的(#.#)








