【CakePHP3】ControllerでViewにsetした値を取得する方法

プログラミング
スポンサーリンク

若干ルー語みたいになってしまいました。

最近、ひとつのアクション内に、同じコントローラー内にある複数アクションを呼び出すページを作る機会がありました。
既存にあるペーじの表示内容を順番やレイアウトを変えて表示するだけなので、正直そのページのアクションを呼び出したほうが手っ取り早いことってよくあります。

でも、何個もアクションを呼び出していると、各アクション内でViewにセットしている変数と名前がかぶったりします。
そうなると、変数の内容が上書きされてうまく動きません。

そこで、いちどViewにセットした変数をもういちど取り出して、別名の変数としてセットしなおすことができたので、ご紹介します。

取り出すには$this->viewVers[‘セットした変数名’]を使う

これが全てです。

$this->set()を行った値はViewVarsTrait.phpにあるviewVarsという変数に配列形式で格納されます。

このviewVarsはコントローラからでも取り出し可能です。

$this->viewVers['セットした変数名'];

で取り出せます。

使ってみた

Controller

/**
 * Index method
 *
 * @return \Cake\Http\Response|void
 */
public function index()
{
    $myFriends = $this->paginate($this->MyFriends);

    $this->set(compact('myFriends'));

    // 好きな文字をセット
    $this->set('myFavoriteMoji','5億円');
    // セットした文字を取り出します。
    $moji = $this->viewVars['myFavoriteMoji'];
    // 再度、別名でセットしなおします。
    $this->set('mySecondFavoriteMoji',$moji);


    // 初めに登録した名前で別の文字をセットします。
    $this->set('myFavoriteMoji','9兆円');
}

Template

<div>
    myFavoriteMojiは「<?=$myFavoriteMoji;?>」です。
</div>
<div>
    mySecondFavoriteMojiは「<?=$mySecondFavoriteMoji;?>」です。
</div>

実行します。

正常に、5億円が退避され、変数$mySecondFavoriteMojiとして取得できています。

 

 

 

 

タイトルとURLをコピーしました