View::make(‘hello’)->with()
withを使った基本的な値の渡し方
LaravelでControllerからViewを指定し、同時にViewで利用するデータを設定するやり方です。
Viewの指定
LaravelのControleerでViewを指定します。
return View::make('hello');
with
指定したViewにデータを渡すためにはwithを使います。
$title = 'Web Engineer Blog'; return View::make('hello')->with('title', $title);
上の設定により、View側で$titleとしてデータを利用することができるようになります。View側では異なる変数名でデータにアクセスすることも可能です。
View側で異なる変数名を設定
$title = 'Web Engineer Blog'; return View::make('hello')->with('name', $title);
with()の最初の引数では、View側で指定する変数名を設定することが出来ます。上のコードの場合は、$nameでデータにアクセスすることが可能になります。
withを使って複数のデータを渡す
複数のwithを使う
複数のデータをViewに渡す場合は、複数のwithを設定することで対応可能です。
return View::make('hello')->with('title', $title)->with('description', $description);
Viewでは、
- $title
- $description
としてデータにアクセスできます。
ハッシュ配列を使う
複数のwithを使わずに、ハッシュ配列に複数のデータを設定し、1つのwithでデータを渡すことも可能です。
$hash = array( 'name' => 'webby', 'email' => 'web@engineer.local', 'status' => 1 ); return View::make('hello')->with($hash);
上のコードの場合は、View側で、
- $name
としてデータにアクセスします。
オブジェクト配列
LaravelのEloquentで取得したデータ
データベースのデータを取得するコードを直接withに設定してView側にデータを渡すことが出来ます。
return View::make('hello')->with('product', Product::get());
LaravelのORM(Eloquent)では、オブジェクト配列のデータ構造でデータを取得することが可能です。
オブジェクト配列を作成しViewで利用する
実際にどのようなデータ構造になっているのか、オブジェクト配列を作成してみます。
$first = array( 'name' => 'kiyoharu', 'email' => 'kiyoharu@engineer.local', 'status' => 1 ); $second = array( 'name' => 'hitoki', 'email' => 'hitoki@engineer.local', 'status' => 1 ); $hash_object = array( (object) $first, (object) $second );
$hash_objectというオブジェクト配列を作成しました。このデータをViewに渡す場合は、上で紹介した方法と同じやり方で対応可能です。
return View::make('hello')->with('hash_object', $hash_object);
Eloquent経由でデータベースから取得したデータ構造と同等のデータをViewに渡すことが出来たので、Viewのblade templateで利用します。
@foreach($hash_object as $hash) <div class="name">{{$hash->name}}</div> @endforeach
オブジェクト配列のデータ構造なら、bladeのforeachとオブジェクト記法でデータにアクセス可能です。
compact
複数のデータをViewに渡す方法はすでに書きましたが、compactを使ってViewに渡すデータをまとめることも可能です。
return View::make('hello')->with(compact('title', 'hash', 'hash_object'));
compactでデータをまとめる場合は、Controller側でViewに渡したい変数をcompactで集約してwithで渡します。