コントローラからビューへ(変数の受け渡しと展開方法)

2020/08/12

Laravelで開発をしていて、個人的によく忘れるのが「コントローラからビューへの変数の受け渡し方法」です。

変数および配列の受け渡し方法は主に2つあります。

  • compactメソッドを使う
  • withメソッドを使う
ポイント

変数や配列以外にも Eloquent の返り値(モデルクラスのインスタンス)やクエリビルダの返り値(stdClassのインスタンス)も受け渡すことができます。これらも後述します。

今回はそんな時のための備忘録としてエントリーします。

 
INDEX

 

compactメソッド

データが単数の場合

コントローラ(変数の受け渡し)


public function index(){
  $name = "山田太郎";

  // mypageディレクトリにあるindex.blade.phpに渡す
  return view('mypage.index',compact('name'));
}

 
ビュー(変数の展開)


<html>
<head></head>
<body>
<h1>ようこそ {{$name}} さん。マイページ画面です。</h1>
</body>
</html>

 
実行結果

 

データが複数の場合

コントローラ(変数の受け渡し)


public function index(){
  $first_name = "山田";
  $last_name = "太郎";
return view('mypage.index',compact('first_name','last_name'));
}

 
ビュー(変数の展開)


<html>
<head></head>
<body>
<h1>ようこそ {{$first_name}} {{$last_name}} さん。マイページ画面です。</h1>
</body>
</html>

 
実行結果

 

Eloquentで取得したデータベースの値(単数)

コントローラ(変数の受け渡し)


public function index(){

//Userの id=1 レコード取得
$user = \App\User::find(1);

return view('mypage.index',compact('user'));
}

 
ビュー(変数の展開)


<html>
<head></head>
<body>
<h1>ようこそ {{$user->name}} さん。マイページ画面です。</h1>
</body>
</html>

 
実行結果

 

Eloquentで取得したデータベースの値(複数)

コントローラ(変数の受け渡し)


public function index(){

//Userの全データを取得
$users = \App\User::all();

return view('mypage.index',compact('users'));
}

 
ビュー(変数の展開)


<html>
<head></head>
<body>
<table border="1">
<tr>
<th>ID</th>
<th>名前</th>
<th>mail</th>
</tr>
@foreach($users as $user)
<tr>
<th>{{$user->id}}</th>
<th>{{$user->name}}</th>
<th>{{$user->email}}</th>
</tr>
@endforeach
</table>
</body>
</html>

 
実行結果

 

withメソッド

データが単数の場合

コントローラ(変数の受け渡し)


public function index(){
$name = "山田太郎";
return view('mypage.index')->with('name',$name);
}

 
ビュー(変数の展開)


<html>
<head></head>
<body>
<h1>ようこそ {{$name}} さん。マイページ画面です。</h1>
</body>
</html>

 

データが複数の場合

コントローラ(変数の受け渡し)

複数のwithを使わずに、ハッシュ配列にデータを設定し、1つのwithでデータを渡すことも可能です。


$hash = array(
  'first_name' => '山田',
  'last_name' => '太郎'
);

return view('mypage.index')->with($hash);

 
ビュー(変数の展開)


<html>
<head></head>
<body>
<h1>ようこそ {{$first_name}} {{$last_name}} さん。マイページ画面です。</h1>
</body>
</html>

 

Eloquentで取得したデータベースの値(単数)

コントローラ(変数の受け渡し)


public function index(){

//Userの id=1 レコード取得
$user = \App\User::find(1);

return view('mypage.index')->with('user',$user));
}

 
ビュー(変数の展開)


<html>
<head></head>
<body>
<h1>ようこそ {{$user->name}} さん。マイページ画面です。</h1>
</body>
</html>

 

Eloquentで取得したデータベースの値(複数)

コントローラ(変数の受け渡し)


public function index(){

//Userの全データを取得
$users = \App\User::all();

return view('mypage.index')->with('users',$users));
}

 
ビュー(変数の展開)


<html>
<head></head>
<body>
<table>
<tr>
<th>ID</th>
<th>名前</th>
<th>mail</th>
</tr>
@foreach($users as $user)
<tr>
<th>{{$user->id}}</th>
<th>{{$user->name}}</th>
<th>{{$user->email}}</th>
</tr>
@endforeach
</table>
</body>
</html>

 
以上です。

 

PHPフレームワーク Laravel入門 第2版

僕がはじめてLaravelを学習するために参考にしたサイトは、掌田津耶乃(しょうだつやの)さんの libro というサイトです。当時(2016年)、Laravel学習サイトの中でもこのサイトは群を抜いてわかりやすく説明されていたので、とても勉強になったのを覚えています。この本は掌田津耶乃さんが書いた本なので、わかりやすく解説されているだろうと kindle で購入しました。2020年8月の時点でいうと日本国内にて唯一の Laravel の良書と言っても良いかと思います。口コミでもLaravel本のロングセラー定番解説書として認知されています。当サイトではチュートリアル形式でLaravelを解説しているので、初心者の方はこの本とセットで学習されるといいと思います。しかし、かなりわかりやすく解説されているとはいえ、PHP中級者以上のスキルは必要です。PHP自体の知識が乏しい方は 独習PHP 第3版 をあわせて購入することをお勧めします。

Amazonで詳細を見る

オススメ

 

本庄マサノリ

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-基礎知識