ホームページ  >  記事  >  バックエンド開発  >  LaravelのViewモジュールの詳しい説明

LaravelのViewモジュールの詳しい説明

巴扎黑
巴扎黑オリジナル
2017-09-21 10:17:372754ブラウズ

この記事では主に、Laravel 学習チュートリアルの View モジュールに関する関連情報をサンプル コードを通じて詳しく紹介します。これは、学習や仕事に必要な学習に役立ちます。編集者と一緒に学びましょう。

はじめに

この記事は主にLaravelのViewモジュールに関する関連情報を紹介し、参考と学習のために共有します。以下では多くを述べませんが、詳細な紹介を見てみましょう。 。

この記事はLaravel 5.4バージョンのルーティングモジュールコードの分析と記述に基づいています

ファイル構造

Viewモジュールのファイル形式と機能は次の図に示すとおりです。


ビジュアルプレゼンテーション中 おおよそのプロセス:

1. view() メソッドを呼び出してビューのプレゼンテーションを開始します

(1)ファイル名に名前空間がある場合 (つまり、:: より前の部分)、名前空間の登録に対応するパス配列が使用され、それ以外の場合はグローバル パス配列 (IlluminateViewFileViewFinder クラスの paths 変数) が使用されます。 ;

(2) 現在のパス、ファイル名、およびサフィックス名 (デフォルトの順序は、blade.php、php、css) と組み合わせて、ファイルが存在するかどうかを判断します。

(3) ファイルが存在しない場合。存在する場合、例外が報告されます: 対応するビュー ファイルが存在しない場合、分析用のサフィックス名に基づいて対応するエンジンが呼び出されます。エンジン、コア呼び出しメソッドは file_get_contents です。php サフィックスの場合は php エンジンを使用し、blade.php サフィックスの場合、コア呼び出しメソッドは


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

5 で​​す。 、ブレード エンジンを使用します。

このエンジンは、キャッシュ ファイルの有効期限が切れていない場合、キャッシュ ファイルを直接呼び出します。それ以外の場合は、sha1 (storage/framework/ にあります) を通じてキャッシュ ファイルを再コンパイルして生成します。ビュー ディレクトリ);


ブレード エンジンのコンパイル



ブレード エンジンは、多数の定期的なマッチングと置換を通じてファイルをコンパイルします


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) を取得し、コメント、拡張機能、ステートメント、エコーの部分を順番に定期的に置換しますコメント部分

コメント記号「{{-- --}}」で囲まれたコードを空の文字列に置き換えます


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

拡張部分


を介してカスタム処理コールバック関数をBladeCompilerに追加します。 extend メソッドを使用し、カスタム処理コールバック関数をテンプレートに追加します。コンテンツは、カスタマイズされたテキスト マッチングに置き換えられます。

コア コードは、次のように IlluminateViewBladeCompiler ファイル内にあります。 @if などのフレームワークに付属の命令を組み合わせてディレクティブを渡すことです メソッド登録命令はテキスト置換を実行します

フレームワークによって提供される命令には次の 10 個の部分があります:

ViewCompilersConcernsCompilesAuthorizations: 権限チェック
コマンドには、@can、@cannot、@elsecan、@elsecannot、@endcan、@endcannot が含まれます

ConcernsCompilesComponents: コンポーネントとスロットに関連します

指示には以下が含まれます: @component、@endcomponent、@slot、@endslot


ConcernsCompilesConditionals: 判決文に関連します

手順には以下が含まれます: @if、@unless、@else、@elseif、@endif、@endunless、@isset、@endisset、@hassection

懸念事項コンパイルに含まれるもの: 埋め込みファイル

手順には以下が含まれます: @each、@include、@includeif、@includewhen

    ConcernsCompilesInjections: Service Injection
  • コマンドには以下が含まれます: @inject


  • ConcernsCompilesLayouts: レイアウトに関連します
  • 手順には以下が含まれます: @extends、@section、@parent、@yield、@show、@append、@overwrite、@stop、@endsection


  • ConcernsCompilesLoops: ループに関連します
  • 手順には以下が含まれます: @forelse、@empty、@endforelse、@endempty、@for、@foreach、@break、@Continue、@endfor、@endforeach、@while、@endwhile


  • ConcernsCompilesRawPhp: ネイティブ PHP ステートメントに関連する
  • コマンドには、@php、@endphp、@unset が含まれます


  • ConcernsCompilesStacks: スタックに関連する
  • コマンドには、@stack、@push、@endpush、@prepend、@endprepend が含まれます


  • ConcernsCompilesTranslations: ローカライズされた翻訳に関連する
  • 手順は次のとおりです: @lang、@endlang、@choice


  • エコーの置換


  • エコー出力は、{!!}、{{ }}、{{{ }}} ;

  • の定期的な置換です。

    {!!} はエスケープされていない文字を出力し、ネイティブ HTML タグで値を出力するために使用されます。
  • {{ }} 通常の出力、三項演算子の置換をサポートします。

  • {{{ }}} はエスケープ文字を出力し、三項演算子の置換をサポートします。

三項演算子の置換の意味: {{ $a ?: "デフォルト値" }} (または {{$a または "デフォルト値"}}) は {{ isset($a) ? $a : "デフォルト値"}} に置き換えられます

以上がLaravelのViewモジュールの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。