LaravelでViewにデータを渡す様々な方法

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
  • $email

としてデータにアクセスします。

オブジェクト配列

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で渡します。

Webエンジニアブログにコメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

LaravelでViewにデータを渡す様々な方法の記事にコメントを投稿