摘要:之前我是使用的這個(gè)從中抽離出來的模板引擎,并且自定義為使用文件后綴。這下一切都簡(jiǎn)單了,我們只需要在或者其他適當(dāng)?shù)姆?wù)提供者里通過調(diào)用就可以非常方便快捷地添加擴(kuò)展名了謹(jǐn)以此文記錄,愿能幫到后來人
原文地址:https://prinzeugen.net/add-ex...
因?yàn)橐恍┰颍覝?zhǔn)備把 Blessing Skin 的框架換成 Laravel 了(之前是自己搭建的一個(gè)框架),但是在模板遷移的時(shí)候遇到了一點(diǎn)問題。
之前我是使用的 XiaoLer/blade 這個(gè)從 Laravel 中抽離出來的 Blade 模板引擎,并且自定義為使用 .tpl 文件后綴。你問為啥不用默認(rèn)的 .blade.php 而是用這個(gè) Smarty 的模板擴(kuò)展名?能有啥,好看唄 :-D
不過之前我是直接調(diào)用 FileViewFinder 類的 addExtension 方法來添加擴(kuò)展名的,但是在 Laravel 里就不能這樣了。你總不能在 IlluminateView 加幾句話吧?
去 Google 搜索了下,沒發(fā)現(xiàn)有可以很方便使用的方法(當(dāng)然是搜的鷹文,說不定是我姿勢(shì)不對(duì)),就只好自己找了。
首先先從 View Facade 入手,可以看到它是從服務(wù)容器中解析出了 view 這個(gè)綁定。繼續(xù)往下找,打開 IlluminateViewViewServiceProvider,看看 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è) IlluminateViewFactory 實(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?這尼瑪是啥?( ?_ゝ?)
看了看文檔也沒看出個(gè)所以然來,就只好從方法的具體代碼里找找蛛絲馬跡了:
$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"];
啊哈,原來這個(gè) $engine 指的是解析 $extension 所使用的引擎!這下一切都水落石出了,如果你在傳入 .tpl 的同時(shí)傳入一個(gè) blade 的引擎,就是告訴 Blade,要把以 .tpl 為擴(kuò)展名的文件用 Blade 模板引擎來解析。
這下一切都簡(jiǎn)單了,我們只需要在 AppServiceProvider (或者其他適當(dāng)?shù)姆?wù)提供者)里通過調(diào)用 View Facade 就可以非常方便快捷地添加擴(kuò)展名了:
View::addExtension("tpl", "blade");
謹(jǐn)以此文記錄,愿能幫到后來人 (*′?`)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/30447.html
摘要:上次提到過,模板引擎一般是要做三件事情變量值的輸出條件判斷和循環(huán)引入或繼承其他文件現(xiàn)在就來看看的模板引擎是如何來處理這三件事情的。引擎接下來就是本文的重點(diǎn)是如何編譯的。如果有興趣的話,也可以實(shí)現(xiàn)一個(gè)自己的模板解析引擎。 上次提到過,模板引擎一般是要做三件事情: 變量值的輸出(echo) 條件判斷和循環(huán)(if ... else、for、foreach、while) 引入或繼承其他文件 ...
摘要:官方地址是目前最流行的框架,發(fā)展勢(shì)頭迅猛,應(yīng)用非常廣泛,有豐富的擴(kuò)展包可以應(yīng)付你能想到的各種應(yīng)用場(chǎng)景,框架思想前衛(wèi),跟隨時(shí)代潮流,提倡優(yōu)雅代碼,自稱為工匠,其中的模板引擎容器以及擴(kuò)展包為業(yè)務(wù)的開發(fā)提供了極大的便利。 laravel5.5+ laravel官方地址 laravel是目前最流行的php框架,發(fā)展勢(shì)頭迅猛,應(yīng)用非常廣泛,有豐富的擴(kuò)展包可以應(yīng)付你能想到的各種應(yīng)用場(chǎng)景,lara...
摘要:它的目的是提供正確的方式進(jìn)行頁面交互測(cè)試,所以可以使用去點(diǎn)擊按鈕或者鏈接填寫表單甚至拖放。此外,提到測(cè)試運(yùn)行比更快。此次因底層架構(gòu)改變較大而重命名。這個(gè)功能受到的啟發(fā),能夠?qū)⒃睾?jiǎn)化為可重用區(qū)域。 showImg(https://segmentfault.com/img/remote/1460000008212617); 轉(zhuǎn)自 Laravel 社區(qū):https://laravel-ch...
摘要:在中使用是一個(gè)很棒的單純的由和構(gòu)建的后臺(tái)模板,在這片文章中,我將講述如何將和優(yōu)雅的整合在一起,而且我們可以通過來及時(shí)的更新和管理。 showImg(https://segmentfault.com/img/bVqBce); 在Laravel5.* 中使用 AdminLTE AdminLTE是一個(gè)很棒的單純的由 HTML 和 CSS 構(gòu)建的后臺(tái)模板,在這片文章中,我將講述如何將 Admi...
摘要:首先你應(yīng)該是在用以上的版本,如果版本在這之下,是時(shí)候該升級(jí)了。按照其官網(wǎng)的說法,這個(gè)組織的目的并不是告訴你你應(yīng)該怎么做,只是一些主流的框架之間相互協(xié)商和約定。和沒有出現(xiàn)在以上的列表中,是因?yàn)檫€沒有投票通過。不要被這些話所困擾。 首先你應(yīng)該是在用 PHP 5.3 以上的版本,如果 PHP 版本在這之下,是時(shí)候該升級(jí)了。我建議如果有條件,最好使用最新的版本。 你應(yīng)該看過 PHP The R...
閱讀 2841·2021-09-10 10:50
閱讀 2197·2019-08-29 16:06
閱讀 3200·2019-08-29 11:02
閱讀 1102·2019-08-26 14:04
閱讀 2813·2019-08-26 13:24
閱讀 2306·2019-08-26 12:16
閱讀 554·2019-08-26 10:29
閱讀 3102·2019-08-23 18:33