Laravel – ビューの基礎

基本的なビューの表示方法

概要

routes/viewsディレクトリー下かそのサブディレクトリー下にビューファイルを置き、ルーティングでそれを指定する。

ビューファイル名には.blade.phpが付加され、HTML以外にLaravelの機能を持たせるための記述を含む、Bladeテンプレートとして扱われる。

  • ビューファイルは
    • resources/viewsディレクトリー下、あるいはそのサブディレクトリー下に置く
    • ファイル名は[ビュー名].blade.phpにする
  • ルーティングでビューファイルを指定するときは
    • 無名関数の処理内容をreturn view('ビュー名');とする
      • ビュー名はビューファイル名から.blade.phpを除いたもの
    • ビューファイルをサブディレクトリー下に配置した場合、resources/viewより下のパスを、デリミターを'.'として記述する

例1

Laravelプロジェクト生成直後に表示される”Laravel”の初期ページ。ルーティングファイルに以下だけ記述されている。

また、resource/viewsディレクトリーにはwelcome.blade.phpファイルのみ準備されている。

内容は以下のとおり。

例2

resourcesディレクトリーの下にsamplesディレクトリーをつくり、その中にview_sample.blade.phpというファイル名で以下の内容のファイルを作成する。

routes/web.phpファイルに以下のルーティングを追加する。

サーバーが起動している状態でブラウザーからドメイン/view_sampleにアクセスすると、view_sample.blade.phpがパースされて表示される。

この場合のビューファイルとview()メソッドでの指定の仕方は以下のとおり。

  • ビューファイルをviewsディレクトリーのサブディレクトリーsamples下に作成
    • views/samples/view_sample.blade.php
  • view()メソッドで呼び出すときは'.blade.php'を除き、パスのデリミターを'.'にした形で指定
    • samples.view_sample

URIの/view_sampleとファイル名のview_sample.blade.phpは必ずしも同じである必要はない。

変数の展開

概要

ビューファイル内に、PHPの変数を埋め込んで内容を反映させることができる。

  • ビューに対して変数を渡すときは、[変数名]=>[内容]を要素とする連想配列で渡す
  • ビュー側では、連想配列のキーが変数名、値が内容として解釈される
  • ビュー内で{{ 変数 }}とすると変数の内容が展開され、HTMLに埋め込まれる

resources/samplesディレクトリー下に、ファイル名blade_sample.blade.phpで以下の内容のファイルを作成する。

このビューに対して、routes/web.php内で以下の様にルーティングを設定。

ビューファイルのパース時に変数が展開され、内容がHTMLに埋め込まれるため、ブラウザーでの表示結果は以下のようなイメージになる。

bladeテンプレートでの変数展開
  • 連想配列をview()の第2引数に渡す
  • それを受け取ったビューでは、キーが変数名、値が変数の内容となる

出力エスケープ

変数埋め込みで内容を展開する際、HTML特殊文字はエンティティーに変換されるが、エスケープを抑制してHTML特殊文字をそのまま出力する方法もある。

概要

  • ビューで{{ ... }}とするとHTMLの特殊文字はLaravelによってエスケープされる
  • {!! ... !!}とするとHTMLの特殊文字はエスケープされず、HTMLとして機能する

ルーティングファイルweb.phpに以下の2行を追加する。

また、先に作成したビューファイルblade_sample.blade.phpに以下の2行を追加する。

この場合のブラウザーの表示結果は以下のイメージ。

bladeテンプレートでの変数展開
  • 連想配列をview()の第2引数に渡す
  • それを受け取ったビューでは、キーが変数名、値が変数の内容となる

HTML特殊文字は<strike>自動的に</strike>エスケープされる

{{…}}}ではなく{!!…!!}で囲むとエスケープされるされない

コメント

Bladeテンプレート内にコメントを書くことができ、HTMLへのパース時にはコメント行は無視される。

概要

  • Bladeテンプレートのコメントは{{-- ... --}}で記述する
  • Bladeのコメントはパース後のHTMLには現れない

最初に使ったview_sample.blade.phpファイルに以下の2行を追加する。

これがパースされた後のHTMLソースは以下の様になり、Blade用のコメントはソースに反映されていない。

ディレクティブ

概要

Bladeテンプレート内に条件分岐やループなどを行うディレクティブを書くことができる。

  • ディレクティブはBladeテンプレートに記述し、ロジック制御やレイアウト処理などPHPとしての処理を埋め込む
  • ディレクティブは@キーワード...のように記述する

まず、ルーティングでビューに配列を渡す。

ビューでは、配列の要素を一つずつ取り出して表示させている。

ここで使われている@foreach@endforeachがディレクティブで、ビューの中でPHPの処理・制御をしたり、レイアウトを扱ったりすることができる。

ディレクティブの詳細はこちら

レイアウト

レイアウトに関するディレクティブを使って、ファイルの共通のレイアウトをまとめることができる。

概要

  • 共通レイアウトのビューを親とする
    • プレースホルダーとして@yieldディレクティブを書く
    • @yieldごとにその場所に入るべきセクション名を指定
  • 共通レイアウトを利用するビューを子とする
    • 親とするレイアウトビューを@extendsディレクティブで指定する
    • 親の各@yieldに対応するセクションを@sectionディレクティブで定義し、その内容を記述する

共通のレイアウトとして、views/layouts/common.blade.phpを以下の内容で準備する。

  • titlle要素に'title'セクションの内容を反映
  • main要素に'content'セクションの内容を反映
  • header要素の部分は、このページが変わっても同じ内容が表示される

この共通レイアウトを使うページを、views/samples/layout_sample.blade.phpとして以下の内容で準備する。

  • @extendsディレクティブで、レイアウトとして使うビューを指定している
  • 1つ目の@sectionディレクティブでtitleセクションに反映させる内容を$title変数で与えている
  • 2つ目の@sectionディレクティブでcontentsセクションに反映させる内容を記述している

これらについて以下のルーティングを設定し、ブラウザーからアクセスする。

出力イメージは以下の様になる。

共通レイアウトに各ページ共通のヘッダーなどを置けます
bladeテンプレートでの変数展開

3は3の倍数
5は5の倍数
6は3の倍数
9は3の倍数
10は5の倍数

スタイル

概要

  • publicディレクトリー下、あるいはそのサブディレクトリー下にCSSファイルを配置する
  • linkタグでCSSファイルを指定する

publicディレクトリー以下に配置されたファイルをlinkタグで指定するには、以下の様に記述する。

たとえばpublicディレクトリー下にcssディレクトリーを作成し、その下にstayles.cssを作成、CSSを記述したとする。

このファイルをビューから呼び出すには、以下の様に記述する。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です