この記事では、LaravelでControllerからviewに変数を渡す方法についてまとめました。
Controllerからviewに変数を渡す方法は大きく2つあります。
チームの開発方針などで使い方が決まっている場合もありますが、知っているといざ初めて見た際にも慌てなくて済みます。
どちらも選べる場合などは開発時に効率が良い方が選択できるようになるのでおすすめです。
この記事を読むと2種類の方法の違いを理解して使い分けることができるようになるのでぜひ最後まで読んでいってください。
ControllerからViewに変数を渡す方法
それではここからControllerからViewに変数を渡す方法を紹介します。
2パターンを実際のコードを交えて順番に紹介していきます。
compact関数を使用する方法
まず最初に紹介するのがcompact関数です。
compact関数を使用すると、Controller内で定義された変数を簡単にViewに渡すことができます。
以下の例をご覧ください。
public function index()
{
$data1 = 'Hello';
return view('welcome', compact('data1'));
}
view()の中の第二引数にcompact()を書きます。
compact()の引数に渡したい変数を入れます。
これで「$data1 = ‘Hello’」という変数がviewに渡ります。
複数の変数をviewに渡したい場合は以下のように書きます。
public function index()
{
$data1 = 'Hello';
$data2 = 'Laravel';
return view('welcome', compact('data1', 'data2'));
}
上記の例では、$data1と$data2という複数の変数をcompact関数を使ってviewに渡しています。
渡した変数をviewを使う方法は後ほど紹介します。
withメソッドを使用する方法
続いてはwithメソッドを使用する方法を紹介します。
以下の例をご覧ください。
public function index()
{
$data1 = 'Hello';
return view('welcome')->with('data1', $data1);
}
viewにわたる変数は「$data1」として使用できます。
with()の第一引数にviewに渡したい変数名、第二引数に変数に入れる値を入れます。
なのでwithの第二引数にはそのままの値も代入可能です。
public function index()
{
return view('welcome')->with('data1', 'Hello');
}
複数の変数を渡したい場合は以下のように書きます。
public function index()
{
$data1 = 'Hello';
$data2 = 'Laravel';
return view('welcome')->with([
'data1' => $data1,
'data2' => $data2
]);
}
with()の中身を連想配列にして定義します。
compact()とは書き方が異なるので注意が必要です。
エンジニアにおすすめ書籍
エンジニアになりたて、これから勉強を深めていきたいという方におすすめの書籍はこちら!
渡した変数をviewで使う方法
viewで渡された変数を使う場合は上記の2パターンで共通です。
viewでの変数の使い方はこんな感じです。
{{ $data }}
渡した変数名を「{{ }}」を使ってそのまま使えます。
compact()で渡した場合も「$」をつけなければいけないので注意が必要です。
配列やEloquentの場合はforeachを使う
配列やEloquentで複数の値やcollectで渡ってきた変数をviewで使う場合はforeachを使います。
以下は、foreachを使用してEloquentで取得したユーザーの名前をを表示する例です。
public function index()
{
$users = User::all();
return view('welcome')->with([
'users' => $users,
]);
}
@foreach($users as $user)
{{ $user->name }}
@endforeach
2パターンのviewへの変数の渡し方を理解しておこう
LaravelでControllerからwiewに変数を渡す方法をまとめました。
compact関数、withメソッドの2つの方法を紹介しました。
どちらの書き方もメリットはあるのでどちらが良いということはないかと思います。
Laravelの開発において、これら2つの方法を理解しながら効率的なコーディングを行いましょう。