概要
Laravelの諸機能について忘れないようにアウトプットする自分用メモ。
ControllerからViewへの変数受け渡し
参考:https://qiita.com/ryo2132/items/63ced19601b3fa30e6de
参考:https://qiita.com/_Mizuki/items/df3a62fbe18bbbbc9ced
参考:http://blog.tojiru.net/article/230164798.html
Controllerからviewに値を渡す場合、ベターな方法が複数あるらしいので調べた。
phpのcompact関数
viewに値を渡す際、compact関数を使用する方法がわりとベターらしい。
compact関数の理解が怪しかったので確認した。
公式の解説では**変数名とその値から配列を作成する。**とのこと。
公式の例
<?php
$city = "San Francisco";
$state = "CA";
$event = "SIGGRAPH";
$location_vars = array("city", "state");
$result = compact("event", $location_vars);
print_r($result);
?>
// result
Array
(
[event] => SIGGRAPH
[city] => San Francisco
[state] => CA
)
良くわからん...。
自分なりに分かりやすかった例。
$arr = array(
'apple' => $apple,
'orange' => $orange,
'lemon' => $lemon,
);
// ↑
// 同じ意味
// ↓
$arr = compact('apple', 'orange', 'lemon');
連想配列のkeyと変数名を勝手に紐付けてくれるらしい。
Controllerからviewへの変数の受け渡し
viewに値を渡すときにcompact関数を使用する場合は以下のようにするといい。
public function fruit()
{
$apple = 'apple';
$orange = 'orange';
$lemon = 'lemon';
return view('fruit', compact('apple', 'orange', 'lemon'));
}
Laravel独自のコレクションなのかと思ってたけど、そういうワケじゃないんですね...。
そもそもviewヘルパ関数がどんなだったっけと思って見直した。
第二引数に連想配列渡すだけなんだ。それを作りやすいからcompact使っているだけ。
つまりこの書き方でも一緒です。
public function fruit()
{
$apple = 'apple';
$orange = 'orange';
$lemon = 'lemon';
$fruit = ['apple'=>$apple, 'orange'=>$orange, 'lemon'=>$lemon];
return view('fruit', $fruit);
}
withメソッド
Controllerからviewへの受け渡しにwithメソッドを使用する場合。
public function fruit()
{
$apple = 'apple';
$orange = 'orange';
$lemon = 'lemon';
return view('fruit')->with('apple', $apple)->with('orange', $orange)->with('lemon', $lemon);
}
もしくはこう
public function fruit()
{
$apple = 'apple';
$orange = 'orange';
$lemon = 'lemon';
return view('fruit')->with([
"apple" => $apple,
"orange" => $orange,
'lemon' => $lemon,
]);
}
ちょっと可読性悪いですね。
個人的ベスト
- 配列を渡す
状況にもよりますが、配列作って渡してあげる方法が一番好きです。
viewヘルパ関数の第二引数が大きくなるのはあまり好きではない。
// 画面にフルーツを渡す
public function fruit()
{
$fruit = $this->returnfruit();
return view('fruit', $fruit);
}
// フルーツの配列を返す
private function returnfruit()
{
$apple = 'apple';
$orange = 'orange';
$lemon = 'lemon';
return compact('apple', 'orange', 'lemon');
}