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