Laravelでコントローラーからビューに変数を渡すにはどうすればいいんだろう…?
こんな疑問を解決します。
コントローラーに変数を定義してビューに渡し、定義した変数を表示させたい場合は、結論withかcompact関数を使いましょう。
私が普段の実務でよく使っているのはすっきりと書けるcompact関数です。
この記事では、withやcompact関数を使ってどうやってコントローラーからビューに変数を渡すのか解説します。
- Laravelでコントローラーからビューに変数を渡せるようになる
休日で空いた時間の暇つぶしを探せるアプリを公開しています。
動作環境
Docker 20.10.7
PHP 7.4.22
Laravel 8.53.1
compactを使ってコントローラーからビューに変数を渡す
compactを使ってコントローラーからビューに渡すには、以下のように書きます。
コントローラー側
/**
* 一覧画面
*/
public function index()
{
$name = 'Laravel';
return view('book.index', compact('name'));
}
ビュー側
<p>{{ $name }}</p>
compact関数は,compact(‘$なしの変数名’)で定義します。それをビュー側では{{ $変数名 }}で表示させます。
私も疑問に思うのですが、compact($変数名)とかくとエラー起きるので注意しましょう。
compact関数の特徴は、少ない記述で済むことで、コードの可続性が上がることですね。
/**
* 一覧画面
*/
public function index()
{
$name = 'Laravel';
$colors = ['red', 'blue', 'white'];
$books = Book::all();
return view('book.index', compact(
'name',
'books',
'colors',
));
}
このように複数の変数を定義してcompact関数でコントローラーからビューに変数を渡せます。
配列や$books = Book::all();のようにLaravelのEloquentを使っている場合は、foreachで取り出せます。
<p>{{ $name }}</p>
@foreach ($books as $book)
<p>{{ $book }}</p>
@endforeach
@foreach ($colors as $value)
<p>{{ $value }}</p>
@endforeach
Eloquentの場合は以下のように->カラム名とすることでデータベースの値にアクセスできます。
@foreach ($books as $book)
<p>{{ $book->book_name }}</p>
@endforeach
compact関数を使ってコントローラーからビューに変数を渡す説明はざっとこんな感じです。
withを使ってコントローラーからビューに変数を渡す
withを使ってもコントローラーからビューに変数を渡せます。
/**
* 一覧画面
*/
public function index()
{
return view('book.index')->with('name', 'Laravel');
}
<p>{{ $name }}</p>
このようにwithの場合は、->with(‘$なしの変数名’, ‘変数の中身’)でコントローラーからビューに渡せます。
変数の中身を定義する場合は以下のように書きます。
/**
* 一覧画面
*/
public function index()
{
$foo = 'Laravel';
return view('book.index')->with('name', $foo);
}
<p>{{ $name }}</p>
ビュー側では->with(‘第一引数’, ‘第二引数’)の第一引数の変数名を呼ばないとエラーになります。
つまり、->with(‘name’, $foo)であれば、第二引数の
<p>{{ $foo }}</p>
としたらエラーになるので、注意しましょう。
withを用いて複数の変数をビューに渡したい場合は以下のように書きます。
/**
* 一覧画面
*/
public function index()
{
$foo = 'Laravel';
$books = Book::all();
return view('book.index')->with([
'name' => $foo,
'books' => $books,
]);
}
compact関数同様にwith関数を使ってもコントローラーからビューに変数を渡すことができます。
ただ、私はやはりcopmpact関数の方が記述量が少ないのでcompactを好んで使っています。
【まとめ】Laravelでコントローラーからビューに変数を渡す方法
Laravelでコントローラーからビューに変数を渡す方法を解説しました。
compact関数とwith関数を紹介しましたが、それぞれ適材適所で使っていきましょう!
他にもLaravelの記事を書いているので、参考にしてください。
休日で空いた時間の暇つぶしを探せるアプリを公開しています。
コメント