国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

為 Blade 模板引擎添加新文件擴(kuò)展名

Gemini / 1173人閱讀

摘要:之前我是使用的這個(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

相關(guān)文章

  • Laravel 模板引擎Blade)原理簡(jiǎn)析

    摘要:上次提到過,模板引擎一般是要做三件事情變量值的輸出條件判斷和循環(huán)引入或繼承其他文件現(xiàn)在就來看看的模板引擎是如何來處理這三件事情的。引擎接下來就是本文的重點(diǎn)是如何編譯的。如果有興趣的話,也可以實(shí)現(xiàn)一個(gè)自己的模板解析引擎。 上次提到過,模板引擎一般是要做三件事情: 變量值的輸出(echo) 條件判斷和循環(huán)(if ... else、for、foreach、while) 引入或繼承其他文件 ...

    vvpvvp 評(píng)論0 收藏0
  • laravel框架應(yīng)用和composer擴(kuò)展包開發(fā)

    摘要:官方地址是目前最流行的框架,發(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...

    shevy 評(píng)論0 收藏0
  • Laravel 5.4 正式發(fā)布

    摘要:它的目的是提供正確的方式進(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...

    Vultr 評(píng)論0 收藏0
  • 在Laravel5.* 中使用 AdminLTE

    摘要:在中使用是一個(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...

    Y3G 評(píng)論0 收藏0
  • 現(xiàn)在寫 PHP,你應(yīng)該知道這些

    摘要:首先你應(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...

    supernavy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<