cakePHPでsmartyviewを使うとsetFlash時に1が出力される理由は
追跡
- htmlソースを見るとゴミが出てる
<div id="flashMessage" class="message">.....</div>1
smartyviewを使わないとゴミは出ない
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が出力された
対策
- return true;をコメントアウトするか、echoをコメントしてreturn $out;とする
- このメソッドをオーバーライドしたほうがよい
- やりかたが分からなかった
- 他の動作に影響を与えないと思われるがテストしてないからわからん