laravel框架實現(xiàn)為 Blade 模板引擎添加新文件擴展名操作示例
本文實例講述了laravel框架實現(xiàn)為 Blade 模板引擎添加新文件擴展名。分享給大家供大家參考,具體如下:
因為一些原因,我準備把 Blessing Skin 的框架換成 Laravel 了(之前是自己搭建的一個框架),但是在模板遷移的時候遇到了一點問題。
之前我是使用的 XiaoLer/blade 這個從 Laravel 中抽離出來的 Blade 模板引擎,并且自定義為使用 .tpl文件后綴。你問為啥不用默認的 .blade.php 而是用這個 Smarty 的模板擴展名?能有啥,好看唄 :-D
不過之前我是直接調(diào)用 FileViewFinder 類的 addExtension 方法來添加擴展名的,但是在 Laravel 里就不能這樣了。你總不能在 Illuminate\View 加幾句話吧?
去 Google 搜索了下,沒發(fā)現(xiàn)有可以很方便使用的方法(當然是搜的鷹文,說不定是我姿勢不對),就只好自己找了。
首先先從 View Facade 入手,可以看到它是從服務(wù)容器中解析出了 view 這個綁定。繼續(xù)往下找,打開 Illuminate\View\ViewServiceProvider,看看 View 的服務(wù)提供者到底是把啥給綁定到 view 上去了:
public function registerFactory() { $this->app->singleton('view', function ($app) { $resolver = $app['view.engine.resolver']; $finder = $app['view.finder']; $env = new Factory($resolver, $finder, $app['events']); $env->setContainer($app); $env->share('app', $app); return $env; }); }
嗯嗯,我們可以看到這是綁定了個 Illuminate\View\Factory 實例,于是我們繼續(xù)往下找,看看這個工廠類都有啥方法:
/** * Register a valid view extension and its engine. * * @param string $extension * @param string $engine * @param \Closure $resolver * @return void */ public function addExtension($extension, $engine, $resolver = null) { $this->finder->addExtension($extension); if (isset($resolver)) { $this->engines->register($engine, $resolver); } unset($this->extensions[$extension]); $this->extensions = array_merge([$extension => $engine], $this->extensions); }
哦哦~ 果然我們在工廠類里找到了一個 FileViewFinder::addExtension
的封裝。然而正當我欣喜地準備調(diào)用的時候,卻發(fā)現(xiàn)這個方法有個神秘的 $engine 參數(shù)。
誒?WTF?這尼瑪是啥?( ・_ゝ・)
看了看文檔也沒看出個所以然來,就只好從方法的具體代碼里找找蛛絲馬跡了:
$this->extensions = array_merge([$extension => $engine], $this->extensions);
哦呀?這一行在 $this->extensions
里加上了一個 [$extension => $engine]
的數(shù)組,那么只要我們看看這個數(shù)組原先的定義,就可以知道這個 $engine 是個啥子了:
/** * The extension to engine bindings. * * @var array */ protected $extensions = ['blade.php' => 'blade', 'php' => 'php'];
啊哈,原來這個 $engine 指的是解析 $extension 所使用的引擎!這下一切都水落石出了,如果你在傳入 .tpl 的同時傳入一個 blade 的引擎,就是告訴 Blade,要把以 .tpl 為擴展名的文件用 Blade 模板引擎來解析。
這下一切都簡單了,我們只需要在 AppServiceProvider (或者其他適當?shù)姆?wù)提供者)里通過調(diào)用 View Facade 就可以非常方便快捷地添加擴展名了:
View::addExtension('tpl', 'blade');
更多關(guān)于Laravel相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Laravel框架入門與進階教程》、《php優(yōu)秀開發(fā)框架總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家基于Laravel框架的PHP程序設(shè)計有所幫助。
- Laravel關(guān)聯(lián)模型中過濾結(jié)果為空的結(jié)果集(has和with區(qū)別)
- Laravel Intervention/image圖片處理擴展包的安裝、使用與可能遇到的坑詳解
- Laravel中基于Artisan View擴展包創(chuàng)建及刪除應(yīng)用視圖文件的方法
- Laravel4中的Validator驗證擴展用法詳解
- 關(guān)于擴展 Laravel 默認 Session 中間件導(dǎo)致的 Session 寫入失效問題分析
- laravel容器延遲加載以及auth擴展詳解
- Laravel中擴展Memcached緩存驅(qū)動實現(xiàn)使用阿里云OCS緩存
- Laravel框架中擴展函數(shù)、擴展自定義類的方法
- laravel框架實現(xiàn)敏感詞匯過濾功能示例
相關(guān)文章
ThinkPHP實現(xiàn)更新數(shù)據(jù)實例詳解(demo)
本文給大家介紹thinkphp實現(xiàn)更新數(shù)據(jù)的實例詳解以及thinkphp更新數(shù)據(jù)庫的五種方法,本文介紹的非常不錯,具有參考借鑒價值,感興趣的朋友可以參考下2016-06-06php使用 readfile() 函數(shù)設(shè)置文件大小大小的方法
本文通過實例代碼給大家講解了php使用 readfile() 函數(shù)設(shè)置文件大小大小的方法,需要的的朋友參考下吧2017-08-08TP5(thinkPHP5)框架使用ajax實現(xiàn)與后臺數(shù)據(jù)交互的方法小結(jié)
這篇文章主要介紹了TP5(thinkPHP5)框架使用ajax實現(xiàn)與后臺數(shù)據(jù)交互的方法,結(jié)合實例形式總結(jié)分析了thinkPHP5使用ajax與后臺數(shù)據(jù)交互的兩種實現(xiàn)方法及相關(guān)操作技巧,需要的朋友可以參考下2020-02-02利用phpexcel把excel導(dǎo)入數(shù)據(jù)庫和數(shù)據(jù)庫導(dǎo)出excel實現(xiàn)
本文介紹利用phpexcel對數(shù)據(jù)庫數(shù)據(jù)導(dǎo)入excel(excel篩選)、導(dǎo)出excel,大家參考使用吧2014-01-01php中計算未知長度的字符串哪個字符出現(xiàn)的次數(shù)最多的代碼
php中計算未知長度的字符串哪個字符出現(xiàn)的次數(shù)最多的代碼,需要的朋友可以參考下2012-08-08