ID , 'noindex' , true)){ echo ''; } ?>

(Laravel) ビューの役割・使い方を解説

(Laravel) ビューの役割・使い方を解説

 

本記事では、
Laravelのビューについて、役割や使い方を詳しく解説していく。

 

Laravelのビューとは

Laravelのビューとは、簡単に言うと、
ブラウザに表示される内容の雛形(テンプレート)のことだ。

laravel-view

 

テンプレート(※詳しくは後述)には主にユーザに表示されるhtmlソースのみを記述し、動的に変化させたい部分はコントローラから受け取ったデータを埋め込んで表示する。

laravelのビューのイメージ画像

 

 

 

Laravelのビューの役割

Laravelのビューの役割は、MVCモデルで表現すると「view」にあたる部分だ。
つまり、クライアント画面の表示部分を担当する。

なので、基本的には表示する内容の雛形(htmlソース)のみを準備しておき、ロジックは基本的に記述しない

表示内容にロジックを要する箇所には、呼び出し元であるコントローラにロジックを記述し、ビューでは結果のみ受け取り、結果を表示する。

 

Laravelのビューの役割
  1. MVCモデルのビューの部分。クライアントに表示する内容の雛形を記述する。
  2. ビューにロジックは記載せず、コントローラにロジックを記載する。

 

ビューファイルの配置場所

Laravelのビューファイルを配置するフォルダは下記

# Laravelのビューファイルを配置するフォルダ

/resources/views

 

/resources/viewsフォルダ以下にビューファイルを配置しておくことで、ルーティングや、コントローラ側から、viewメソッドでファイルを呼びだすことができ、画面に内容を表示することができる。

#コントローラからviewメソッドを使う例

public function index() {

   return view('hello.index');  # /resources/views/helloフォルダ内の、index.phpを呼ぶ
}

 

Laravelのテンプレートエンジン「blade」

Laravelのビューは、bladeというテンプレートエンジンを使用する
一昔前ならば、phpではSmartyというテンプレートエンジンがよく使われていたが、Laravelはbladeだ。ちょっと名前がかっこいい。

bladeを使ったファイルの拡張子は「.blade.php」。
bladeには変数の値を{{ }}で埋め込むことができるなど、直感的にソースを扱える特徴がある

bladeの具体的な使い方などは、別記の下記参照。

 

Laravelのビューの使い方




では、次に、
Laravelのビューの使い方について、解説していく。

 

ビューファイルの呼び出し方

ルーティングや、コントローラからviewファイルを呼び出す際には、view()メソッドを使う。
view()メソッドを使用する際は、/resouses/viewsフォルダからのパスで指定することに注意。

#view()メソッドの書式
view(‘フォルダ名.ファイル名’);

 

viewメソッドをコントローラのアクションに記述し、viewを呼び出す例が以下

#コントローラからviewメソッドを使う例

public function index() {

   return view('hello.index');  # /resources/views/helloフォルダ内の、index.phpを呼ぶ
}

 

「hello.index」と書いてあるが、これは
「/resources/views/helloフォルダ内の、index.blade.phpを呼び出す」ということを意味する。

フォルダの区切りはカンマで指定するので注意して欲しい。

ちなみに、.phpや.blade.php等の拡張子は省略できる。

 

view()メソッドで、ビューへ値を受け渡す

view()メソッドは、
第二引数に連想配列で値を渡すことで、ビューファイルに、値(配列)を渡すことができる
そしてビューファイルは配列の値をhtml内に{{{$変数名}}とすることで埋め込むことが可能だ。

上記の仕組みを使うことで、コントローラのロジックで動的に取得した値などを、ビューファイル側で使用できるようになり、画面の値を動的に表示できる。

//view()メソッドでの値の受け渡し
view( ファイル名, 連想配列)

 

laravelのビューのイメージ画像2

 

以下が実際ビューに配列で値を渡す例。
コントローラのindexアクション内で、ビューに渡す配列 「$data」 を作成し、viewメソッドの第二引数に指定している。

public function index($id=‘zero’) {

    $data = [
        ‘msg’=>’メッセージ’,
        ‘id’=>$id
    ];

    return view(‘hello,index’, $data);
}

 

view()メソッドを介して渡された連想配列の値は、
ビュー側(blade)では{{$キー}}として受け取り、表示内容に値を埋め込むことができる。

先ほどの$dataに入っている、‘msg’=>’メッセージ’を例に説明。
例えば<p>タグに「メッセージ」という値を表示させたい場合以下のようにする

# ビュー(blade)

<p>{{$msg}}</p>    #メッセージと表示

 

キーのmsgを「$msg」として{{ }}で囲むだけ。
本来なら<?php 変数名 ?>と書くところを、わかりやすく、簡単に記述することができる。

 

$requestインスタンス経由で、クエリ文字列を受け取る

viewの使い方と言うわけではないが、
動的なサイト作り関連の機能の基本として、クエリ文字列が存在する。
laravelではこのクエリ文字列を効率的に使用できる仕組みが最初から備わっているので紹介しておく。

クエリ文字列とは

クエリ文字列とは、urlの後ろの方にパラメータとして指定する文字列のことだ。
キー=値」の組み合わせで指定する。

例)urlから「localhost:8080/hello?id=hoge」にアクセスがあった場合、
→「hello?id=hoge」の部分がクエリ文字列になる。

 

webページのformの値をGETメソッドで送信すると、上記の様にurlの後ろにパラメータが付与された状態でリクエストが送信される。

(PHP) GETとPOSTの違い【適切な使い分け方も解説】

 

 

webページは、このクエリ文字列のパラメータを受けとり、受け取ったデータを元に動的なサイトを作成したりする。laravelでクエリ文字列を受け取るには、コントローラのアクション引数に「Request $request」を指定する。

public function index(Request $request) { //Request $requestを指定

    $data  = [
        ‘id’=>$request->id  //$requestインスタンスからidを取得
    ];

    return view(…)
}

 

$requestインスタンスは、受け取ったクエリ文字列の情報を保持しており、
$request->キーとすることで値の取得が可能。

 

ヘルパ関数(※ビューに限らずLaravel全般の機能)

Laravelには、ヘルパ関数と呼ばれる、Laravel独自のメソッドが用意されている。
様々な機能があるので、時間があれば色々と調べてみると、よりLaravelに精通できるだろう

 

例として、formタグを使うときには必ず書かないといけないヘルパ関数のcsrf_field()メソッドを紹介する。csrf_field()メソッドは、CSRFという攻撃を防ぐために書く。

formタグ直下に、{{ csrf_field() }}と記述する。

<form action="" method="post">
    <{{ csrf_field() }}>

.....
</form>

 

blade.phpは.phpより優先度が高い

blade.phpは.phpより優先度が高い
優先度が高いと言うのは、読み込む優先度が高いと言う意味だ。

index.phpとindex.blade.phpがコントローラに存在した状態で、
view(‘index’)を読み込んだら、index.blade.phpが優先的に読み込まれる。

 

ビューで変数を受け取る {{$キー }} は、HTMLエスケープしてくれる

Laravelの場合、
ビューで変数を受け取る{{$ }}に入った値は、HTMLエスケープ処理を自動で行ってくれる。

つまり、HTMLタグなどを埋め込もうとしても、ただの文字列になってしまうということだ。

逆にエスケープして欲しくない場合は、{{!! $キー !!}}と書く。
そうすることで、タグなどはそのままHTMLとして認識される。

 

関連記事

http://laravel.jp/

https://laravel.com/docs/9.x/blade

 

記事が気に入った方はシェアをお願いします!

コメントを残す

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