0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ControllerからViewへの変数受け渡し

Last updated at Posted at 2020-05-17

概要

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');
}
0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?