Laravelを勉強し始めて間もない頃につまずきがちな"連想配列"ですが、コントローラからビューに値を受け渡す際に使われます。
連想配列って?
なんで連想配列で記述すると値をビューに渡すことができるの?
そんな疑問にお答えします!
配列と連想配列
配列と連想配列について確認します。
配列について
配列の例は以下です。
\$data = ['name', 'tokyo', 'soccer', 12];
配列では、各要素に整数のインデックス番号(0,1,2...)が自動的に割り当てられます。
・0 => 'taro'
・1 => 'tokyo'
・2 => 'soccer'
・3 => 12
配列の各要素は、インデックス番号を使ってアクセスできます。例えば、$data[0]とすると'taro'にアクセスできます。
連想配列について
連想配列の例は以下です。
\$data = [
'name' => 'taro',
'city' => 'tokyo',
'sport' => 'soccer',
'number' => 12
];
連想配列では、各要素に任意のキー(文字列などを)割り当ててアクセスします。番号ではなく、意味のある名前でアクセスできるため、より直感的でわかりやすいです。
・'name' => 'taro'
・'city' => 'tokyo'
・'sport' => 'soccer'
・'number' => 12
各要素は、キーを使ってアクセスします。
例えば、$data['city']で'tokyo'にアクセスできます。
連想配列でコントローラからビューにデータを受け渡す
Laravelでは、ビューに渡すデータを連想配列としてまとめることが一般的であり、Laravelの公式ドキュメントでも推奨されています。そこで、記述例を以下に記載します。
コントローラ側の記述は以下
class TestController extends Controller
{
public function index(Request $request)
{
$data = [
'name' => 'taro',
'city' => 'tokyo',
'sport' => 'soccer',
'age' => 12
];
return view('test.index', \$data);
}
}
ビュー側の記述は以下
名前:{{ \$name }}
出身:{{ \$city }}
得意なスポーツ:{{ \$sport }}
年齢:{{ \$age }}
Laravelの内部動作
ここで一つ気になる点があります。それは、連想配列のキーにそれぞれ'name, 'city', 'sport', 'age'と指定しているだけで、ビュー側で\$name, \$city, \$sport, \$ageという変数として扱うことができています。これはなぜでしょうか?
実は、Laravelが内部的に配列のキー名を変数名として自動展開しているのです。Laravelを学習する上でつまずきポイントだと思うので理解しておくと良いです。私はLaravelを使った開発期間中、謎に思いながらコードを書いていました笑