摘要:背景緣由網上有許多自己去編寫一些類來實現框架的有很多。這個是在我進行項目改造的過程中操作的手法,搭建一個簡陋的的簡易架構其中和是使用的中的。那基本上之后要調用某個控制器的某個方法就是用來實現例如就是調用控制器下的方法。
背景緣由
網上有許多自己去編寫一些類來實現MVC框架的有很多。這個是在我進行項目改造的過程中操作的手法,搭建一個簡陋的MVC的簡易架構其中model和view是使用的laravel中的。下列實現的方式在很多地方會跟laravel很相似哦,廢話不多說,直接上步驟。(這里假設你已經按照了composer)
Step1 Composer init直接執行composer init,按照步驟一步步下去,創建composer.json文件
使用composer可以實現類的自動加載功能,運用該功能是用來額,怎么說呢,偷懶的。將生成的composer文件按下圖修改,然后按下圖左邊目錄結構創建。
修改完配置后執行
composer install composer dump-autoloadStep 2 構建一些基本文件及功能
之后在helper.php文件中添加一個函數,該函數是判斷函數及其controller存在與否
if (!function_exists("isAvailableController")) { function isAvailableController($controller,$method,$debug) { if(class_exists($controller)){ $app =$controller::getinstance(); //判斷調用的方法控制器類中是否存在 if(!method_exists($controller,$method)){ echo $controller."類不存在".$method."方法!"; die(); } } else { echo $controller."類不存在!"; die(); } return $app; } }
在Controllers目錄下新建一個Controller作為抽象類
init(); } final protected function __clone(){} protected function init(){} //abstract protected function init(); public static function getInstance(){ if(static::$instance === null){ static::$instance = new static(); } return static::$instance; } }
之后在Controllers目錄下新建控制器就行了,例如我實現一個TestController,請注意新建的控制器必須以Controller結尾并繼承上面的Controller,如下:
namespace AppControllers; class TestController extends Controller { public function index() { echo "link start ^_^"; } }
創建一個配置文件config.php
return [ "DEBUG" => true, "timeZone" => "Asia/Shanghai", "APP_ROOT" => dirname(__FILE__), "VIEW_ROOT" => dirname(__FILE__)."/app/View", ];
之后呢,在項目根目錄(這里就是mvc目錄)下建立一個index.php
$method(); die();
從上面的代碼上其是可以看到如果沒有傳遞get參數為c的會自動調用BaseController,該控制器繼承自抽象類Controller,里面有個index方法,這里直接return一個字符串link start ^_^ 。那基本上之后要調用某個控制器的某個方法就是用url來實現例如http://localhost/mvc/?c=Test&... 就是調用TestController控制器下的index方法?,F在來看下是否內實現:
看來沒有問題,其他比較深奧的什么路由重寫啊神馬的,先不考慮。
Step3 實現模板引擎這里實現模板引擎的方式是使用laravel的blade模板引擎,如何引入呢,這里使用composer來引入一個包來解決。
composer require xiaoler/blade
這個包git上有比較詳細的說明,這個是xiaoler/blade包的連接
引入完這個包怎么實現模板引擎呢,我自己是根據包的說明實現了一個View類把他放到Cores目錄下內容如下:
namespace AppCores; use XiaolerBladeFileViewFinder; use XiaolerBladeFactory; use XiaolerBladeCompilersBladeCompiler; use XiaolerBladeEnginesCompilerEngine; use XiaolerBladeFilesystem; use XiaolerBladeEnginesEngineResolver; class View { const VIEW_PATH = [APP_ROOT."/app/View"]; const CACHE_PATH = APP_ROOT."/storage/framework/cache"; public static function getView(){ $file = new Filesystem; $compiler = new BladeCompiler($file, self::CACHE_PATH); $resolver = new EngineResolver; $resolver->register("blade", function () use ($compiler) { return new CompilerEngine($compiler); }); $factory = new Factory($resolver, new FileViewFinder($file, self::VIEW_PATH)); return $factory; } }
測試一下,http://localhost/mvc/?c=Test&...,也就是調用TestController的index方法
該控制器的代碼如下:
namespace AppControllers; use AppCoresView; class TestController extends Controller { public function index() { $str = "模板在哪里啊,模板在這里。"; return View::getView()->make("index", ["str" => $str])->render(); } }
控制器中調用的模板是index.blade.php,內容如下:
home view {{ $str }}
模板引擎功能OK啦,之后就可以愉快地使用blade模板引擎了,不過有些laravel中自帶的一些語法是不能用的哦,該包的git上有說明這里引用下
Step4 實現Model@inject @can @cannot @lang 關鍵字被移除了
不支持事件和中間件
這里使用的是illuminate / database包來實現Model的,執行以下命令安裝。
composer require illuminate/database
在Core目錄下新建一個DB類,代碼如下:
init(); } final protected function __clone(){} protected function init(){ $capsule = new Capsule; $capsule->addConnection([ "driver" => "mysql", "host" => "localhost", "database" => "mes", "username" => "root", "password" => "12345678", "charset" => "utf8", "collation" => "utf8_unicode_ci", "prefix" => "", ]); // Make this Capsule instance available globally via static methods... (optional) $capsule->setAsGlobal(); // Setup the Eloquent ORM... (optional; unless you"ve used setEventDispatcher()) $capsule->bootEloquent(); } //abstract protected function init(); public static function linkStart(){ if(static::$instance === null){ static::$instance = new static(); } return static::$instance; } }
這樣在controller中就可以使用了,例如先在app目錄下建立Model目錄,在Model中新建一個Model文件Matter.php。
之后可以在控制器中這么使用:
"TEST", "metal_name" => "test", "materiel_type" => 1, "enable" => 0, "deadline" => 30 ]); $res= Metal::all()->toArray(); var_dump($res); die(); } }這里有一些限制,就是無法使用laravel中的DB::connect(),不過其他的基礎使用好像都可以。并且這里無法切換連接的數據庫,這個其實可以將DB類進行修改,至于如何修改,自己想嘍。這個project放到了github上,點擊這里查看。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26273.html
摘要:今天我在這里給大家分享一下在中如何創建數據模型和基于的搭建。對象與數據庫的關系通常在電腦的世界里創建的數據模型會轉換為數據庫里的一條條記錄。 Symfony是一款優秀的基于MVC架構的PHP框架。今天我在這里給大家分享一下在Symfony中如何創建數據模型和基于RESTful api的搭建。重點是如何創建數據模型哦! 本教程使用的當前Symfony的LTS版本(Symfony 2.8...
摘要:的演進按照上述的說明,在一個單體服務中,隨著業務的不斷迭代,可能會發生什么嚴重的問題。個人認為造成這個原因的主要原因還是在于長期以來的這種模式只有縱向切分導致。摘要 mvc是一種軟件設計模式,最早由Trygve Reenskaug在1978年提出,他有效的解決了表示層,控制器層,邏輯層的代碼混合在一起的問題,很好的做到了職責分離。但是在實際的編碼實踐過程中,你會發現這個模式隨著業務的擴展,變...
摘要:曾今誰都有過迷茫期,下面是我開始開發中,不斷改變的代碼組織方式。 曾今 誰都有過迷茫期,下面是我開始PHP開發中,不斷改變的代碼組織方式。 初期:所有代碼一股腦控制器controller 曾今只是簡單的理解MVC 中期:業務代碼抽象一部分到模型層model 開始覺得model層是否該做點什么了 后期:業務代碼控制器,模型層只寫db的curd方法 復雜的業務代碼使contro...
摘要:引入了命名空間,這是規劃在中的功能,所以在一定程度上其實就是,的下一個版本是,即將發布,主要貢獻者是大名鼎鼎的鳥哥。使用修改為自動載入路由配置新增注意替換數據庫密碼修改無需改動。作者接受采訪時曾表示,是整個中最難實現的部分。 原文發表在我的個人網站:利用 Composer 一步一步構建自己的 PHP 框架(四)——使用 ORM 本教程示例代碼見 https://github.com...
摘要:消費者開發本例我們使用的多進程開發工具來完成這個需求,通常使用常駐進程來處理隊列的消費,所以我們使用的類型,模式。中進程負責執行郵件發送任務。此時終端將打印成功收到測試郵件官網 注意:這個是 MixPHP V1 的范例 郵件發送是很常見的需求,由于發送郵件的操作一般是比較耗時的,所以我們一般采用異步處理來提升用戶體驗,而異步通常我們使用消息隊列來實現。 傳統 MVC 框架由于缺少多進程...
閱讀 3154·2021-11-22 14:45
閱讀 3300·2019-08-29 13:11
閱讀 2306·2019-08-29 12:31
閱讀 922·2019-08-29 11:21
閱讀 2991·2019-08-29 11:09
閱讀 3617·2019-08-28 18:11
閱讀 1420·2019-08-26 13:58
閱讀 1273·2019-08-26 13:27