0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

連想配列とLaravelの内部動作

Last updated at Posted at 2024-12-10

以前の記事(以下のリンク先の記事)でLaravelの内部動作について少し書きました。その記事では、連想配列が格納された変数自体(つまり、連想配列の形で渡された変数ではない)がそのままコントローラからビューへ渡されたケースについて触れました。今回は、配列の中に連想配列が格納された変数におけるLaravelの内部動作について紹介します。

連想配列の形で渡された変数

 前提として、基本的には連想配列の形でコントローラからビューへ変数が渡されます。例えば以下のような記述です。

コントローラ側の記述は以下
class TestController extends Controller
{
 public function index(Request $request)
 {
  $data = [
  [
   'name' => 'taro',
   'city' => 'tokyo',
   'sport' => 'soccer',
   'age' => 12
  ],
  [
   'name' => 'jiro',
   'city' => 'osaka',
   'sport' => 'baseball',
   'age' => 14
  ],
  [
   'name' => 'hanako',
   'city' => 'kyoto',
   'sport' => 'basketball',
   'age' => 13
  ]
  ];
  return view('test.index', ['data' => $data]);
 }
}


ビュー側の記述は以下

@foreach($data as $item)

名前:{{ $item['name'] }}
出身:{{ $item['city'] }}
得意なスポーツ:{{ $item['sport'] }}
年齢:{{ $item['age'] }}


@endforeach

上記の記述の場合、なぜビュー側で'name'や'city'といったコントローラ側で定義された連想配列のキーが使用できるのでしょうか?

データバインディング

実は、Laravelのデータバインディングという仕組みが鍵を握っています。
データバインディングとは、コントローラで準備したデータがビュー内でそのまま変数として利用できる仕組みのことです。そして、 もしそのデータが連想配列であれば、そのキーを使ってビュー内で中身(値)にアクセスすることができるようになります。

もう一度先ほどの記述を見ていきます。

コントローラ側の記述は以下
class TestController extends Controller
{
 public function index(Request $request)
 {
  $data = [
  [
   'name' => 'taro',
   'city' => 'tokyo',
   'sport' => 'soccer',
   'age' => 12
  ],
  [
   'name' => 'jiro',
   'city' => 'osaka',
   'sport' => 'baseball',
   'age' => 14
  ],
  [
   'name' => 'hanako',
   'city' => 'kyoto',
   'sport' => 'basketball',
   'age' => 13
  ]
  ];
  return view('test.index', ['data' => $data]);
 }
}


コントローラ内で複数の連想配列が格納された配列が$dataという変数として定義されています。そして、return viewの第二引数の部分で、その変数が連想配列の形でビューへと渡されています。ここで、データバインディングの登場です!


ビュー側の記述は以下

@foreach($data as $item)

名前:{{ $item['name'] }}
出身:{{ $item['city'] }}
得意なスポーツ:{{ $item['sport'] }}
年齢:{{ $item['age'] }}


@endforeach


ビュー内のforeachの中で$dataとありますが、これはデータバインディングにより、コントローラ内で準備した変数が使えるからであり、正しいと記述となります。
次に$itemとありますが、こちらにコントローラ側で準備された連想配列が代入されています。そしてこれもデータバインディングの仕組みにより、例えば、{{ $item['name'] }}というように、キーである'name'を使って値('taro'、'jiro'、'hanako')にアクセスすることができるのです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?