Web事業部実績紹介
Web事業部実績紹介
2009.06.12

renderElementで使いたい変数があったら

まっちー

ちょっと前に、renderElementを使うとelementsフォルダに入っているファイルをview内で読み込めるようなことを書いた。それについて一つ知ったことがあったので、メモ。

// index.ctp

<?php foreach($data as $val) : ?>

 € € € € <?php echo $this->renderElement('program') ?>

<?php endforeach ?>

// program.ctp

<?php echo $val ?>

例えばこんな感じでindex.ctpというファイルと、elementsフォルダの中にprogram.ctpというファイルがあったとする。

僕はこう書けばforeachの$valがprogram.ctp内でもそのまま使えるのかと思っていたのだけど、どうやらそれはダメらしい。controllerでsetした変数ならそのまま使えるけれど、上のような場合は、renderElementの第2引数にエレメントで使う変数を定義しておく必要がある。

// index.ctp

<?php foreach($data as $val) : ?>

 € € € € <?php echo $this->renderElement('program', array('val' => $val) ?>

<?php endforeach ?>

// program.ctp

<?php echo $val ?>

これでOK。今はarrayの中身が両方ともvalになっているけど、別にこれはいつでも同じになるわけじゃない。要は↓こういうこと。

// index.ctp

<?php foreach($data as $val1) : ?>

 € € € € <?php echo $this->renderElement('program', array('val2' => $val1) ?>

<?php endforeach ?>

// program.ctp

<?php echo $val2 ?>