[Zend Framework] Zend_Controller: FlashMessenger アクションヘルパーをつかう
FlashMessenger と Twitter Bootstrap を利用して、メッセージを表示した後にじわっと消えるような機能を実装してみます。
[markdown]
> * [アクションヘルパー – Zend_Controller – Zend Framework](http://framework.zend.com/manual/1.12/ja/zend.controller.actionhelpers.html#zend.controller.actionhelpers.flashmessenger)
> * [Components · Bootstrap](http://twitter.github.io/bootstrap/components.html#alerts)
> * [Easy Flash Messenger Messages in Zend Framework | Aaron Saray](http://aaronsaray.com/blog/2011/06/14/easy-flash-messenger-messages-in-zend-framework/)
## 書き方
ビューファイルのメッセージを表示したい場所に下記を書きます。
“`php:application/views/scripts/index/sitemap.phtml
= $this->flashMessages() . PHP_EOL; ?>
“`
あわせて、`id=”notice”` という要素をじわっと消すスクリプトを書いておきます。
例えばレイアウトビューファイルに書いておきます。
“`php:application/layouts/scripts/layout.phtml
“`
ビューヘルパーを用意します。
“`php:application/views/helpers/FlashMessages.php
getMessages();
$output = ”;
if (!empty($messages)) {
foreach ($messages as $message) {
$output .= ‘
‘;
}
}
return $output;
}
}
“`
## 使い方
コントローラから、css の class名とメッセージを渡します。
### 対応するビューに表示
sitemapAction で以下を実行したとします。
“`php:application/controllers/IndexController.php
// 操作完了の FlashMessage を表示する
$this->_helper->flashMessenger->addMessage(
array(‘alert-success’=>’更新されました。’));
“`
ビューに仕込んだ部分にメッセージが表示されました。
### 遷移先のビューに表示
こんな感じでリダイレクトしたときでも
“`php:application/controllers/IndexController.php
// 操作完了の FlashMessage を表示する
$this->_helper->flashMessenger->addMessage(
array(‘alert-success’=>’更新されました。’));
$this->_redirect(‘/index’);
“`
遷移先に下記が仕込んであれば
“`php:application/views/scripts/index/index.phtml
= $this->flashMessages() . PHP_EOL; ?>
“`
メッセージが表示されました。
## session has already been started by session.auto-start or session_start()
コントローラ内に `session_start();` があると、このエラーが出ます。
メッセージの保管に Zend_Session_Namespace を使っているためのようです。
> * [アクションヘルパー – Zend_Controller – Zend Framework](http://framework.zend.com/manual/1.12/ja/zend.controller.actionhelpers.html#zend.controller.actionhelpers.flashmessenger)
セッション管理には Zend_Session を使った方がよさそう。
> * [php – "session has already been started…." exception in Zend Framework application – Stack Overflow](http://stackoverflow.com/questions/2418124/session-has-already-been-started-exception-in-zend-framework-application)
> * [Zend_Session – Zend Framework Reference – Zend Framework](http://framework.zend.com/manual/1.12/ja/zend.session.html)
[/markdown]