【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");
}
result
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');と書くことで、全てのビューで値を共有できます。

app/Providers/AppServiceProvider.php
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を使用する方がスッキリする場合も多いです。

配列や連想配列も普段どおりの感覚で使えるため、簡単に表示ができますね。

laravel pass value thumb

役に立ったらシェアしよう!