Laravel - 7. ビュー - 出力の制御
引き続きビューの仕組みについて学習していきましょう。Bladeテンプレートエンジンにおいては @if
ディレクティブや @for
ディレクティブによって分岐構造や反復構造を定義できます。ここではまずBladeの動作を確認するためにコントローラ( app/Http/Controllers/HelloController.php
)において変数を追加してみましょう。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HelloController extends Controller
{
public function index()
{
$title = "Hello View!";
$messages = ["Hello", "Bonjour", "Ciao"];
return view("hello/index", compact("title", "messages"));
}
}
HelloController
クラスの index
アクションにおいて、 $messages
配列を追加しています。この $messages
配列も view
メソッドによって resources/views/hello/index.blade.php
から参照できるようになります。
続いてビュー( resources/views/hello/index.blade.php
)を修正してみましょう。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Sample</title>
</head>
<body>
<h1>{{ $title }}</h1>
<ul>
@foreach ($messages as $message)
@if (mb_strlen($message) >= 5)
<li>{{ $message }}</li>
@endif
@endforeach
</ul>
</body>
</html>
ここでは @foreach
ディレクティブを使って $messages
配列の要素を繰り返し処理しています。 @foreach
ディレクティブの使い方はPHPの foreach
構文とよく似ています。また繰り返しの中では @if
ディレクティブと mb_strlen
関数を使って $message
変数の内容が5文字以上のものだけを出力しています。このようにビューの中でも反復構造や分岐構造を定義できます。
動作確認
コントローラとビューを修正したので、PHPのビルトインWebサーバを使ってWebアプリケーションを起動してみましょう。次のようにコマンドを入力します。
$ php artisan serve --host 0.0.0.0
Laravel development server started: http://0.0.0.0:8000
続いてブラウザを起動してWebアプリケーションにアクセスしてみましょう。
http://localhost:8000/hello
実行結果からビューの中で @foreach
ディレクティブや @if
ディレクティブが正しく動作しているのがわかります。
まとめ
- Bladeで記述したビューファイルには分岐構造や反復構造を定義できる
@if
ディレクティブで分岐構造を定義する@for
ディレクティブや@foreach
ディレクティブで反復構造を定義する