2009-03-24
cakePHPでsmartyviewを使うとsetFlash時に1が出力される理由は
追跡
- htmlソースを見るとゴミが出てる
<div id="flashMessage" class="message">.....</div>1
smartyviewを使わないとゴミは出ない
smartyコンパイルはこうなってる
<?php echo $this->_tpl_vars['session']->flash(); ?>
cake/libs/view/helpers/session.php#130あたり
function flash($key = 'flash') {
if ($this->__active === true && $this->__start()) {
if (parent::check('Message.' . $key)) {
$flash = parent::read('Message.' . $key);
if ($flash['layout'] == 'default') {
if (!empty($flash['params']['class'])) {
$class = $flash['params']['class'];
} else {
$class = 'message';
}
$out = '<div id="' . $key . 'Message" class="' . $class . '">' . $flash['message'] . '</div>';
} elseif ($flash['layout'] == '' || $flash['layout'] == null) {
$out = $flash['message'];
} else {
$view =& ClassRegistry::getObject('view');
list($tmpLayout, $tmpVars, $tmpTitle) = array($view->layout, $view->viewVars, $view->pageTitle);
list($view->layout, $view->viewVars, $view->pageTitle) = array($flash['layout'], $flash['params'], '');
$out = $view->renderLayout($flash['message']);
list($view->layout, $view->viewVars, $view->pageTitle) = array($tmpLayout, $tmpVars, $tmpTitle);
}
echo($out);
parent::del('Message.' . $key);
return true;
}
}
return false;
}
- return true;をコメントすると1が出なくなる
- return 'aaa'と書けばaaaが出力された
原因
- flashメソッド内でecho($out)してるのにコンパイル済みsmartyでflash()の内容をechoしてるから1(true)が出力される
対策
- return true;をコメントアウトするか、echoをコメントしてreturn $out;とする
- このメソッドをオーバーライドしたほうがよい
- やりかたが分からなかった
- 他の動作に影響を与えないと思われるがテストしてないからわからん
今回の対処
//echo($out);
parent::del('Message.' . $key);
return $out;
トラックバック - http://d.hatena.ne.jp/iphlox/20090324/1237869710
リンク元
- 2 http://www.google.co.jp/search?hl=ja&q=Address+already+in+use:+make_sock:+could+not+bind+to&btnG=検索&lr=lang_ja
- 2 http://www.google.com/search?hl=ja&client=safari&rls=ja-jp&q=MP3EmphasisBitChanger&btnG=検索&lr=
- 1 http://209.85.175.132/search?q=cache:cmVniFH8wigJ:d.hatena.ne.jp/iphlox/20081116/1226787450+ping+生存確認+スクリプト&hl=ja&ct=clnk&cd=1&gl=jp
- 1 http://d.hatena.ne.jp/keyword/cakephp
- 1 http://search.yahoo.co.jp/search?fr=slv1-fftbtop&p=FreeWLAN
- 1 http://search.yahoo.co.jp/search?p=timemachine++リストア&search.x=1&fr=top_ga1_sa&tid=top_ga1_sa&ei=UTF-8&aq=&oq=
- 1 http://www.google.co.jp/reader/view/
- 1 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&hs=NVL&q=nmbd+停止&btnG=検索&lr=lang_ja
- 1 http://www.google.co.jp/search?hl=ja&lr=&q=jing+SoundFlower&start=30&sa=N
- 1 http://www.google.co.jp/search?hl=ja&lr=lang_ja&client=firefox&rls=org.mozilla:ja-JP-mac:official&hs=fvR&q=openmeta&start=20&sa=N