laravel框架實(shí)現(xiàn)為 Blade 模板引擎添加新文件擴(kuò)展名操作示例
本文實(shí)例講述了laravel框架實(shí)現(xiàn)為 Blade 模板引擎添加新文件擴(kuò)展名。分享給大家供大家參考,具體如下:
因?yàn)橐恍┰?,我?zhǔn)備把 Blessing Skin 的框架換成 Laravel 了(之前是自己搭建的一個(gè)框架),但是在模板遷移的時(shí)候遇到了一點(diǎn)問(wèn)題。
之前我是使用的 XiaoLer/blade 這個(gè)從 Laravel 中抽離出來(lái)的 Blade 模板引擎,并且自定義為使用 .tpl文件后綴。你問(wèn)為啥不用默認(rèn)的 .blade.php 而是用這個(gè) Smarty 的模板擴(kuò)展名?能有啥,好看唄 :-D
不過(guò)之前我是直接調(diào)用 FileViewFinder 類的 addExtension 方法來(lái)添加擴(kuò)展名的,但是在 Laravel 里就不能這樣了。你總不能在 Illuminate\View 加幾句話吧?
去 Google 搜索了下,沒(méi)發(fā)現(xiàn)有可以很方便使用的方法(當(dāng)然是搜的鷹文,說(shuō)不定是我姿勢(shì)不對(duì)),就只好自己找了。
首先先從 View Facade 入手,可以看到它是從服務(wù)容器中解析出了 view 這個(gè)綁定。繼續(xù)往下找,打開(kāi) 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;
});
}
嗯嗯,我們可以看到這是綁定了個(gè) Illuminate\View\Factory 實(shí)例,于是我們繼續(xù)往下找,看看這個(gè)工廠類都有啥方法:
/**
* 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);
}
哦哦~ 果然我們?cè)诠S類里找到了一個(gè) FileViewFinder::addExtension 的封裝。然而正當(dāng)我欣喜地準(zhǔn)備調(diào)用的時(shí)候,卻發(fā)現(xiàn)這個(gè)方法有個(gè)神秘的 $engine 參數(shù)。
誒?WTF?這尼瑪是啥?( ・_ゝ・)
看了看文檔也沒(méi)看出個(gè)所以然來(lái),就只好從方法的具體代碼里找找蛛絲馬跡了:
$this->extensions = array_merge([$extension => $engine], $this->extensions);
哦呀?這一行在 $this->extensions 里加上了一個(gè) [$extension => $engine] 的數(shù)組,那么只要我們看看這個(gè)數(shù)組原先的定義,就可以知道這個(gè) $engine 是個(gè)啥子了:
/** * The extension to engine bindings. * * @var array */ protected $extensions = ['blade.php' => 'blade', 'php' => 'php'];
啊哈,原來(lái)這個(gè) $engine 指的是解析 $extension 所使用的引擎!這下一切都水落石出了,如果你在傳入 .tpl 的同時(shí)傳入一個(gè) blade 的引擎,就是告訴 Blade,要把以 .tpl 為擴(kuò)展名的文件用 Blade 模板引擎來(lái)解析。
這下一切都簡(jiǎn)單了,我們只需要在 AppServiceProvider (或者其他適當(dāng)?shù)姆?wù)提供者)里通過(guò)調(diào)用 View Facade 就可以非常方便快捷地添加擴(kuò)展名了:
View::addExtension('tpl', 'blade');
更多關(guān)于Laravel相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Laravel框架入門與進(jìn)階教程》、《php優(yōu)秀開(kāi)發(fā)框架總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家基于Laravel框架的PHP程序設(shè)計(jì)有所幫助。
- Laravel關(guān)聯(lián)模型中過(guò)濾結(jié)果為空的結(jié)果集(has和with區(qū)別)
- Laravel Intervention/image圖片處理擴(kuò)展包的安裝、使用與可能遇到的坑詳解
- Laravel中基于Artisan View擴(kuò)展包創(chuàng)建及刪除應(yīng)用視圖文件的方法
- Laravel4中的Validator驗(yàn)證擴(kuò)展用法詳解
- 關(guān)于擴(kuò)展 Laravel 默認(rèn) Session 中間件導(dǎo)致的 Session 寫入失效問(wèn)題分析
- laravel容器延遲加載以及auth擴(kuò)展詳解
- Laravel中擴(kuò)展Memcached緩存驅(qū)動(dòng)實(shí)現(xiàn)使用阿里云OCS緩存
- Laravel框架中擴(kuò)展函數(shù)、擴(kuò)展自定義類的方法
- laravel框架實(shí)現(xiàn)敏感詞匯過(guò)濾功能示例
相關(guān)文章
PHP輸出當(dāng)前進(jìn)程所有變量/常量/模塊/函數(shù)/類的示例
PHP輸出當(dāng)前進(jìn)程所有變量、常量、模塊、函數(shù)、類的示例2013-11-11
ThinkPHP中__initialize()和類的構(gòu)造函數(shù)__construct()用法分析
這篇文章主要介紹了ThinkPHP中__initialize()和類的構(gòu)造函數(shù)__construct()用法,以實(shí)例形式分析了ThinkPHP中類的初始化時(shí)構(gòu)造子類的方法,是采用ThinkPHP進(jìn)行面向?qū)ο蟪绦蛟O(shè)計(jì)中比較重要的概念,需要的朋友可以參考下2014-11-11
PHP中isset()和unset()函數(shù)的用法小結(jié)
本篇文章主要是對(duì)PHP中isset()和unset()函數(shù)的用法進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-03-03
PHP7使用ODBC連接SQL Server2008 R2數(shù)據(jù)庫(kù)示例【基于thinkPHP5.1框架】
這篇文章主要介紹了PHP7使用ODBC連接SQL Server2008 R2數(shù)據(jù)庫(kù),結(jié)合實(shí)例形式分析了基于thinkPHP5.1框架使用ODBC連接SQL Server2008數(shù)據(jù)庫(kù)相關(guān)操作技巧,需要的朋友可以參考下2019-05-05
使用composer命令加載vendor中的第三方類庫(kù) 的方法
這篇文章主要介紹了使用composer命令加載vendor中的第三方類庫(kù)的方法,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07
CodeIgniter中實(shí)現(xiàn)泛域名解析
這篇文章主要介紹了CodeIgniter中實(shí)現(xiàn)泛域名解析的方法,需要的朋友可以參考下2014-07-07
php 模擬 asp.net webFrom 按鈕提交事件實(shí)例
需要php方面的項(xiàng)目開(kāi)發(fā),php剛剛?cè)腴T,在寫按鈕提交過(guò)程中,asp.net里的按鈕事件更好些,下面有個(gè)實(shí)例,大家可以看看2014-10-10

