フラッシュ
class FlashComponent(ComponentCollection $collection, array $config = array())
FlashComponent は、フォームの処理後やデータの確認のために表示する一回限りのメッセージ通知に 使用します。 このような通知を CakePHP では「フラッシュメッセージ」と呼んでいます。 FlashComponent は、 $_SESSION にフラッシュメッセージを書き込みます。そして、 FlashHelper を使ってビューで表示します。
FlashComponent は、 非推奨となった SessionComponent の setFlash() メソッドを 置き換えるコンポーネントです。
フラッシュメッセージの設定
FlashComponent は、フラッシュメッセージの設定に2つの方法を用意しています。 ひとつは、 __call マジックメソッドで、もうひとつは set() メソッドです。
デフォルトのフラッシュメッセージハンドラを使用するために、 set() メソッドが 使用できます。 :
$this->Flash->set('This is a message');Added in version 2.10.0
フラッシュメッセージは積み重なります。連続して set() や __call() を同じキーで 呼び出すと、 $_SESSION にメッセージが追加されます。古い動作 (連続して呼び出しても 1つのメッセージ) を保ちたい場合、メッセージをセットする際に clear オプションに true をセットしてください。
独自の Flash エレメントを作成するためには、 FlashComponent の __call マジック メソッドで、 app/View/Elements/Flash ディレクトリ以下に配置されたエレメントと メソッド名を関連づけることができます。規約により、キャメルケース形式のメソッドは、 小文字でアンダースコア区切りのエレメント名に置き換えられます。 :
// app/View/Elements/Flash/success.ctp を使用
$this->Flash->success('This was successful');
// app/View/Elements/Flash/great_success.ctp を使用
$this->Flash->greatSuccess('This was greatly successful');FlashComponent の __call や set() メソッドは、第2引数にオプションの配列を 設定できます。
keyデフォルトは 'flash'。セッション内の 'Flash' キー配下の配列キー。elementデフォルトは null ですが、__call()マジックメソッドの使用時には、 自動的に設定されます。表示に使用されるエレメント名。paramsエレメントの中で変数として利用する配列。clear指定されたキーや要素の既存のフラッシュメッセージを削除するためにtrueをセットしてください。(2.10.0 で追加)
オプションの使用例:
// コントローラの中で
$this->Flash->success('The user has been saved', array(
'key' => 'positive',
'params' => array(
'name' => $user['User']['name'],
'email' => $user['User']['email']
)
));
// ビューの中で
<?php echo $this->Flash->render('positive') ?>
<!-- app/View/Elements/Flash/success.ctp の中で -->
<div id="flash-<?php echo h($key) ?>" class="message-info success">
<?php echo h($message) ?>: <?php echo h($params['name']) ?>, <?php echo h($params['email']) ?>.
</div>__call() マジックメソッドを使用している時、 element オプションは、 常に置き換えられます。プラグインから指定したエレメントを取得するためには、 plugin パラメータをセットしてください。 例:
// コントローラの中で
$this->Flash->warning('My message', array('plugin' => 'PluginName'));上記のコードは、 plugins/PluginName/View/Elements/Flash 配下の warning.ctp エレメントを使用しています。
NOTE
デフォルトでは、CakePHP は、フラッシュメッセージ中の HTML はエスケープしません。 もし、任意のリクエストやユーザーデータをフラッシュメッセージ中で使用する場合は、 メッセージを表示する際に h でエスケープしなければなりません。
フラッシュメセージの表示に関する詳しい情報は、 FlashHelper セクションをご覧ください。