Help us understand the problem. What is going on with this article?

Laravelで、view('target.view', ['id' => $id, 'name' => $name]) を少しでもスマートに書きたい

More than 1 year has passed since last update.

はじめに

皆さんはLaravelライフをエンジョイしてますか?
私は職場でのLaravel歴が長いことから、公式ドキュメントに書いていないような方法で実装を勧めていることが多いです。
Laravel初心者の方には理解に苦しむようなコードを書くことも多く、普段からチームメンバの力量に合わせて適材適所で力を発揮しています。(キリッ)

さて、今回はLaravelでビューにパラメータを渡す際の小技を、初心者の方や使い慣れてきた方向けに紹介していきたいと思います。

公式ページに記載されているビューへのパラメータの渡し方

例1
// ビューへ渡すパラメータを事前に連想配列として準備し…
$user = \App\User::first();
$data['user'] = $user;

// ビューを指定する際に引数として渡す
return view('hello', $data);
例2
// ビューへ渡すパラメータを事前に準備し…
$user = \App\User::first();

// ビューを指定する際に連想配列として渡す
return view('hello', ['user' => $user]);

どうです?イケてますか?連想配列をわざわざ作るコードを書くのは辛いと思いますが…。
私の身の回りの開発者の中でも、特にPHP初心者の方はこの書き方で書いていることが多いです。
上記の例では$userのみのため、まだましな方だと思います。

でも過去には、以下のようなコードを書いていた人もチームメンバに遭遇したことがあります。

カオスコード1
$data['a'] = $a;
$data['b'] = $b;
$data['c'] = $c;
$data['d'] = $d;
$data['e'] = $e;

return view('hello', $data);
カオスコード2
return view('hello', [
    'a' => $a,
    'b' => $b,
    'c' => $c,
    'd' => $d,
    'e' => $e,
]);

いやだ!!、こんな書き方はしたくない!
そもそも変数名と同じキーを指定する連想配列を定義するなんてイケてない!

連想配列をわざわざ作るコードなんて書きたくない場合

compact関数を使うパターン
// ビューへ渡すパラメータを事前に準備し…
$user = \App\User::first();

// ビューのパラメータを指定するタイミングに一気に連想配列を作成する
return view('hello', compact('user'))

私の場合は上記のようにPHP標準のcompact関数を利用し、見るからにイケてないコードを意図的に排除しています。
このように書くことで少しはスッキリ感じないでしょうか?
それによりカオスコードが少しは許容できるような見た目になります。

許容できるようになったカオスコード2
return view('hello', compact('a','b','c','d','e'));

またビューのパラメータは連想配列で渡すことになってますが、実はオブジェクトを渡す方法もあります。
この方法については後日新しい記事として取り扱う予定です。

以上

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away