【Laravel】 ControllerからViewに値を渡す方法
ControllerからViewには、簡単に値を渡すことができます。渡した値は、bladeというテンプレートエンジンのおかげで簡単に表示することができます。
単なる値の渡し方、配列の渡し方なども見ていきましょう。
基本的な渡し方
Controller側
ControllerからViewに値を渡すには、view
関数の第2引数に連想配列で入れます。
public function index () { $hoge = 100; $fuga = "abc"; return view('index', [ 'hoge' => $hoge, 'fuga' => $fuga, ]); }
View側
Controllerで指定した連想配列のキーを使って、{{ $var }}
のようにするとその値を表示できます。
これは.blade.php
内でのみ可能なため、例えば外部のJavascriptに直接埋め込むといったことはできません。
<p>{{ $hoge }}</p> <p>{{ $fuga }}</p>
実際にWebページを表示してみて、コントローラで設定した値が表示されていたらOKです。
渡し方の種類
上の例では連想配列で渡しましたが、他にも様々な書き方があります。
compactを使う
compactは、PHPに標準で用意されている関数です。変数名をそのままキーとした連想配列を作ることができます。この関数の引数に、連想配列にしたい変数名を並べます。
$hoge = 100; $fuga = "abc"; $d = compact('hoge', 'fuga'); foreach ($d as $k => $v) { print("$k: $v"); }
hoge: 100 fuga: abc
これを利用して、viewに値を送ります。
public function index () { $hoge = 100; $fuga = "abc"; return view('index', compact('hoge', 'fuga')); }
もし、必ず何かしらの変数に入れて渡すのであればcompact
を使うとスッキリします。
withメソッドを使う
view
関数からメソッドチェーンでwith
で送る値を書くことができます。
public function index () { $hoge = 100; $fuga = "abc"; return view('index') ->with('hoge', $hoge) ->with('fuga', $fuga); }
またはwith
関数の中に連想配列を入れます。
return view('index')->with([ 'hoge' => $hoge, 'fuga' => $fuga ]);
長ったらしいので普通の連想配列で良いと思います。
配列を渡す
配列や連想配列を渡す際も、通常と同様に渡します。
public function index () { $hoge = [100, 'hoge', 500]; return view('index', compact('hoge')); }
表示する側では、@foreach
を使用すると列挙可能です。普通にインデックスやキーを使用して値を取得する際も、PHPと同じ書き方で動作します。
@foreach ($hoge as $k => $v) <p>{{ $k }} {{ $v }}</p> @endforeach {{ $hoge[0] }}
全てのビューで共有する値
全てのビューで共有する値を設定するには、ServiceProviderに情報を追加します。
AppServiceProvider.php
や、新規で追加したProviderにView::share('key', 'value');
と書くことで、全てのビューで値を共有できます。
namespace App\Providers; // これをuseしておかないと完全修飾子で書く必要がある use Illuminate\Support\Facades\View; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { // ... public function boot() { // Viewからは $foo で値を取得できる View::share('foo', 'barbaz'); } }
まとめ
ControllerからViewに値を渡す際は、view
関数の第2引数に連想配列で入れます。連想配列を作る際は、普通に作るよりもcompact
を使用する方がスッキリする場合も多いです。
配列や連想配列も普段どおりの感覚で使えるため、簡単に表示ができますね。
