久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

Laravel學習教程之View模塊詳解

這篇文章主要給大家介紹了關于Laravel學習教程之View模塊的相關資料,文中通過示例代碼將View模塊介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面

前言

本文主要是給大家介紹了關于Laravel中View模塊的相關資料,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。

本文是基于Laravel 5.4版本的路由模塊代碼進行分析書寫;

文件結構

View模塊的文件格局及功能如下圖所示:

Laravel學習教程之View模塊詳解

視圖化呈現時的大概流程:

1、通過view()方法的調用,開始視圖的呈現;

2、首先,查找視圖文件;

(1)依次遍歷路徑,如果文件名帶命名空間(也就是::之前的部分),則采用命名空間對應注冊的路徑數組,否則采用全局路徑數組(在Illuminate\View\FileViewFinder類中的paths變量);

(2)結合當前路徑,文件名,后綴名(默認順序是blade.php、php、css),判斷文件是否存在;

(3)如果文件不存在,報異常:對應的view文件不存在;如果文件存在,則根據后綴名調用對應的引擎進行解析;

3、如果是css后綴,采用file引擎,核心調用方法是file_get_contents;

4、如果是php后綴,采用php引擎,核心調用方法是

ob_start();
include $__path;
ob_get_clean();

5、如果是blade.php后綴,采用blade引擎;

這個引擎會主動作緩存處理,如果緩存文件未過期,則直接調用緩存文件,否則重新編譯,并通過sha1生成緩存文件(位于storage/framework/views目錄下);

Blade 引擎編譯

Blade引擎對文件的編譯,是通過大量的正則匹配和替換實現的;

protected $compilers = [ 
 'Comments', // 注釋部分
 'Extensions', // 擴展部分
 'Statements', // 語句塊 (@ 開頭的指令)
 'Echos',  // 輸出
];

protected function parseToken($token) {
 list($id, $content) = $token;
 
 if ($id == T_INLINE_HTML) {
  foreach ($this->compilers as $type) {
   $content = $this->{"compile{$type}"}($content);
  }
 }
}

在解析的過程中,Blade會先使用token_get_all函數獲取視圖文件中的被PHP解釋器認為是HTML(T_INLINE_HTML)的部分,然后依次進行Comments、Extensions、Statements 和 Echos部分的正則替換;

注釋部分

核心代碼如下,將注釋符號“{{-- --}}”包裹的代碼替換為空字符串;

preg_replace("/{{--(.*?)--}}/s", '', $value);

擴展部分

通過extend方法向BladeCompiler添加自定義處理的回調函數,對模板內容進行自定義的文本匹配替換;

核心代碼在Illuminate\View\BladeCompiler文件中,如下:

// 自定義的文本替換擴展 數組
protected $extensions = [];

protected function compileExtensions($value) {
 foreach ($this->extensions as $compiler) {
  $value = call_user_func($compiler, $value, $this);
 }
 
 return $value;
}

指令替換

這部分就是將類似@if這種框架自帶的指令和通過directive方法注冊的指令進行文本替換;

框架提供的指令有以下十部分:

  • View\Compilers\Concerns\CompilesAuthorizations: 權限檢查
    指令包括:@can、@cannot、@elsecan、@elsecannot、@endcan、@endcannot
  • Concerns\CompilesComponents:與組件、插槽相關
    指令包括:@component、@endcomponent、@slot、@endslot
  • Concerns\CompilesConditionals:與判斷語句相關
    指令包括:@if、@unless、@else、@elseif、@endif、@endunless、@isset、@endisset、@hassection
  • Concerns\CompilesIncludes:嵌入文件
    指令包括:@each、@include、@includeif、@includewhen
  • Concerns\CompilesInjections:服務注入
    指令包括:@inject
  • Concerns\CompilesLayouts:和布局相關
    指令包括:@extends、@section、@parent、@yield、@show、@append、@overwrite、@stop、@endsection
  • Concerns\CompilesLoops:與循環相關
    指令包括:@forelse、@empty、@endforelse、@endempty、@for、@foreach、@break、@continue、@endfor、@endforeach、@while、@endwhile
  • Concerns\CompilesRawPhp:與原生PHP語句相關
    指令包括:@php、 @endphp、 @unset
  • Concerns\CompilesStacks:和堆棧相關
    指令包括:@stack、@push、@endpush、@prepend、@endprepend
  • Concerns\CompilesTranslations:與本地化翻譯相關
    指令包括:@lang、@endlang、@choice

Echo 替換

【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

下面小編就為大家分享一篇laravel ORM 只開啟created_at的幾種方法總結,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要給大家介紹了如何通過源碼解析Laravel的依賴注入的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著
這篇文章主要給大家介紹了關于Laravel中unique和exists驗證規則的優化的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面
最近在使用laravel5.5,利用其實現了一個功能,下面分享給大家,這篇文章主要給大家介紹了關于Laravel 5.5基于內置的Auth模塊如何實現前后臺登陸的相關資料,文中通過示例代碼介紹的非
laravel 的隊列服務對各種不同的后臺隊列服務提供了統一的 API,下面這篇文章通過源碼分析給大家介紹了關于 Laravel 重復執行同一個隊列任務的原因,文中通過示例代碼介紹的非常詳細
這篇文章主要給大家介紹了關于 Laravel Redis 多個進程同時取隊列問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或工作具有一定的參考學習價值,需要的朋友下面來
主站蜘蛛池模板: 国产免费人成xvideos视频 | 一区二区三区国产 | 亚洲国产福利视频 | 色先锋影音 | 日韩国产欧美一区 | 欧美精品一区二区三区蜜桃视频 | 久久日韩粉嫩一区二区三区 | 欧美黄色大片在线观看 | 亚洲国产成人在线观看 | 国产欧美一级二级三级在线视频 | 超碰人人做| 一区二区三区国产好 | 91网站视频在线观看 | 欧美色综合一区二区三区 | 在线精品一区 | 91免费小视频| 九九99精品 | 日韩一区二区在线视频 | 岛国av在线免费观看 | 免费骚视频 | 日韩中文在线视频 | 夜夜操天天操 | 国产精品国产三级国产aⅴ入口 | 日本中文字幕在线视频 | 国内精品久久久久 | 午夜视频一区二区 | 日日噜噜夜夜爽爽狠狠 | 精品一二区 | 日韩精品一区二区三区视频播放 | 99re在线视频观看 | 日本a级大片 | 中文字幕视频三区 | 婷婷久久五月天 | 成人免费网视频 | 日本中文字幕日韩精品免费 | 亚洲一区在线观看视频 | 欧美激情在线播放 | 国产精品五月天 | 欧美三级在线 | 一区二区三区久久久 | 国产精品久久久久久久午夜 |