Laravelを使用してアプリケーションを開発する場合は、データベースに保存されたデータを取り出してそのデータをブラウザに表示させる処理が必要になります。そのためにはまず変数をブラウザに表示させる方法を理解しておく必要があります。変数を渡す方法はいくつもあるのでこの機会にしっかり理解しておきましょう。

変数を渡す方法

先に結論になりまますが、Bladeファイルに変数を渡す方法を先に記述しておきます。内容を下記を読み進めれば理解できるようになっています。


// 配列を使う
$greeting = 'Victoria';
return view('welcome',['name' => $greeting]);


// withを使う
$greeting = 'Victoria';
return view('welcome')->with('name',$greeting);
 or
return view('welcome')->with(['name' => $greeting]);

// compactを使う
$name = = 'Victoria';
return view('welcome',compact('name'));

// compactとwithを一緒に使う
$name = = 'Victoria';
return view('welcome')->with(compact('name'));

// withとLaravelの機能を使う
$greeting = 'Victoria';
return view('welcome')->withName($greeting);
LaravelではBladeファイルに記述した内容がブラウザに表示されます。ブラウザに表示させるためには、Bladeファイルへデータを渡す方法を理解する必要があります。

Hello Worldを表示

変数を渡す前にブラウザにHello Worldを表示させるための手順を確認しておきます。Hello Worldを表示させるためにwelcome.blade.phpを下記のように書き換えます。


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Laravel</title>
</head>
<body>
    <h1>Hello World!!</h1>
</body>
</html>

ルーティングファイルweb.phpはインストール直後のまま何も変更を加えません。


Route::get('/', function () {
    return view('welcome');
});

php artisan serverで開発サーバを起動させ、ブラウザで127.0.0.1:8000にアクセスするとHello Worldが表示されます。


laravel58 $ php artisan serve
Laravel development server started: <http://127.0.0.1:8000>
[Tue Jun 11 16:30:19 2019] 127.0.0.1:50434 [200]: /favicon.ico
Hello Worldを表示
Hello Worldを表示

bladeファイルであるwelcome.blade.phpにhtml文を記述すればそのままブラウザに表示されることが理解できます。

変数データをwelcome.blade.phpに渡す

下記のように変数greetingにVictoriaの文字列を入れた場合、どのようにwelcome.blade.phpに渡すのでしょう。以下のようにルーティングファイルに変数を記述しただけではwelcome.blade.phpファイルに変数を渡すことはできません。


Route::get('/', function () {

	$greeting = 'Victoria';
	
    return view('welcome');
});

配列を使う

view関数の引数に配列を追加することで変数を渡すことが可能になります。


Route::get('/', function () {

	$greeting = 'Victoria';

    return view('welcome',['name' => $greeting]);

});

変数を渡すこと方法がわかりましたがbladeファイル側ではどうやって渡された変数を表示させるのでしょうか。bladeファイルはphpファイルなので、echo関数を使うことで表示することができます。ルーティングファイル側の変数名はnameを使っているためbladeファイル側では$nameを使用することで変数を受け取ることができます。混乱して$greetingではと勘違いしないように注意してください。


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Laravel</title>
</head>
<body>
    <h1>Hello <?php echo $name; ?></h1>
       or 
    <h1>Hello {{ $name }}</h1>
</body>
</html>

ブラウザにHello Victoriaが表示されていれば変数はbladeファイル側に渡されています。

Hello Victoriaが画面に出れば変数は渡せている
Hello Victoriaが画面に出れば変数は渡せている

withメソッドを使う

withメソッドを利用することもできます。


$greeting = 'Victoria';
return view('welcome')->with('name',$greeting);
 or
return view('welcome')->with(['name' => $greeting]);

PHPのcomapct関数を使う

PHPのcompact関数も使用することができます。compact関数はPHPの関数なので先にcompact関数の使用方法を確認します。

compact関数とは

compact関数が何かわからない人もいると思うので、簡単に説明を行っておきます。compact関数は変数が宣言されていたら、compact関数の引数にその変数名を指定すると変数名と値で構成された配列を作成することができます。


$first_name = 'John';

$last_name = 'Doe';

dd(compact('first_name','last_name'));

// ddの結果
array:2 [▼
  "first_name" => "John"
  "last_name" => "Doe"
]

compact関数を使って配列を作成することがわかったので、以下のような記述も可能です。しかしcompactの場合は、変数名がwelcome.blade.phpに渡されるので、greetingからnameに変更しなければなりません。

変数をgreetingにした場合は、bladeファイル側でecho $greetingに変更する必要あります。

$name = = 'Victoria';
return view('welcome',compact('name'));

withメソッドとcompact関数を使う

withメソッドとcompct関数を組み合わせることも可能です。


$name = = 'Victoria';
return view('welcome')->with(compact('name'));

withとLaravelの機能を使う

最後になりますが、もう一つ下記の方法があります。withの後に変数名をつけるとこれまでと同じように変数を渡すことが可能です。Laravelの機能を利用しており、withの後ろには任意の名前をつけることが可能なようです。


return view('welcome')->withName($greeting);

配列データを渡す場合

ここからは配列のデータの渡す方法とblade側での処理を説明していきます。

下記の配列を準備します。


$friends = ['Ken','Mike','John','Lisa'];

withを使う

配列を使っても渡し方は同じです。


$friends = ['Ken','Mike','John','Lisa'];

return view('welcome')->with('friends',$friends);

Bladeファイル側では配列を展開する処理が必要になります。PHP関数をそのまま記述しても@foreachを使用しても結果は同じです。


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Laravel</title>
</head>
<body>
    <h1>Hello Friends</h1>

    <ul>
        <?php foreach($friends as $friend){ ?>
        <li><?php echo $friend; ?></li>
        <?php } ?>
    </ul>

    <ul>
        @foreach($friends as $friend)
        <li>{{ $friend }}</li>
        @endforeach
    </ul>
</body>
</html>

compact関数を使う

compact関数も渡す方法は同じです。


$friends = ['Ken','Mike','John','Lisa'];

return view('welcome',compact('friends'));

このように変数でも配列でも同じ方法でデータを渡すことができます。

複数の変数を渡したい場合

これまでは1つの変数のみを渡しましたが一度に複数の変数を渡したい場合はどのような処理になるのでしょうか。

withメソッドの場合は、メソッドチェーンを使って渡すことができます。また、compactの場合は、引数を増やすことで対応することができます。


$best_friend = 'Victoria';

$friends = ['Ken','Mike','John','Lisa'];

// withの場合
return view('welcome')->with('friends',$friends)->with('best_friend',$best_friend);

// compactの場合
return view('welcome',compact('best_friend','friends'));

変数が複数来ても変数毎に名前がついているので名前で識別を行えば、Bladeファイル側の処理は同じです。


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Laravel</title>
</head>
<body>
    <h1>Hello Friends</h1>

    <p>best friend : {{ $best_friend }}</p>

    <ul>
        @foreach($friends as $friend)
        <li>{{ $friend }}</li>
        @endforeach
    </ul>
</body>
</html>

変数の渡し方を中心に説明を行ってきましたが、個人的にはcompactを利用しています。