CakePHP のセッション (Session) コンポーネントは、複数のページにわたってクライアントのデータを継続して保持する方法を提供します。このコンポーネントは $_SESSION 変数に関連したいくつかの便利なメソッドを持つラッパのように振舞います。
CakePHP ではセッションの複数の方法で設定を行えます。 詳しくは セッションの設定 を参照してください。
セッションコンポーネントはセッション情報を伝えあうために使われます。 ユーザへ出力するメッセージの作成はもちろんのこと、基本的な CRUD 機能が含まれます。
覚えておきたいことは、 ドット記法 により配列構造で作成可能ということです。 そのため User.username は、次のような値が参照されます。:
array('User' => array(
'username' => 'clark-kent@dailyplanet.com'
));
ドット (.) は、多次元配列のために使われます。 この表記は、セッションコンポーネント内で使用されるどの name/key においても使われます。
$name のなかに、$value をセッションとして格納します。 $name には、ドット記法の配列を使用できます。 たとえば:
$this->Session->write('Person.eyeColor', 'Green');
これは ‘Green’ という値を、 Person => eyeColor というキーに書き込んでいます。
セッション内の $name というキーの値を返します。 もし $name が null の場合、セッション全体の値を返します。:
$green = $this->Session->read('Person.eyeColor');
セッションから ‘Green’ という値を取り出します。 キー存在しない場合は null が返されます。
セッションの値がセットされているかチェックするために使用します。 存在する場合は true を、存在しない場合は false を返します。
$name キーのセッションをクリアします。 例:
$this->Session->delete('Person.eyeColor');
セッションには ‘Green’ という値も eyeColor というキーも、もう存在しません。 しかし、 Person というキーはまだあります。 Person 全体を削除するためには次のようにします。:
$this->Session->delete('Person');
destroy メソッドは、セッションクッキーと temporary file system 内のすべてのセッションデータを削除します。 PHPセッションを無効にし、新鮮なセッションを作成します。:
$this->Session->destroy();
戻り値の型: | void |
---|
Webアプリケーションではしばしば、フォームの処理やデータの受け取り時に、一回限りの通知をユーザに対して表示したいときがあります。 このような通知を CakePHP では、 “flash message” と呼んでいます。 セッションコンポーネントによって flash message をセットし、 SessionHelper::flash() を使用し表示します。 メッセージのセットは、 setFlash を使用します。:
// controller にて
$this->Session->setFlash('Your stuff has been saved.');
ユーザに表示する一回限りのメッセージが作成されます。 セッションヘルパーを使用します。:
// view にて
echo $this->Session->flash();
// このように出力されます
<div id="flashMessage" class="message">
保存しました
</div>
ほかの種類の flash message を表示するために setFlash() に追加のパラメータを設定できます。 たとえば、エラー・成功・注意に別の見た目にするかもしれません。 CakePHP は、そのような場合のやり方を用意しています。 $key パラメータを使い、多数のメッセージを保存し、別々に出力することができます。:
// bad message をセット
$this->Session->setFlash('Something bad.', 'default', array(), 'bad');
// good message をセット
$this->Session->setFlash('Something good.', 'default', array(), 'good');
ビュー内にて、次のように別々の見た目で出力できます。:
// viewにて
echo $this->Session->flash('good');
echo $this->Session->flash('bad');
$element パラメータは、 /app/View/Elements 内のどのエレメントを使用しメッセージを表示するかに使います。 エレメント内では $message によってメッセージを利用できます。 まずコントローラ内でメッセージをセットします。:
$this->Session->setFlash('Something custom!', 'flash_custom');
エレメントファイル app/View/Elements/flash_custom.ctp を作成し、特別な表示がされるようにします:
<div id="myCustomFlash"><?php echo h($message); ?></div>
$params は追加の変数をビューに渡します。 パラメータは描画した div に影響を及ぼします。 たとえば、配列 $params に “class” を追加し、レイアウトやビュー内で $this->Session->flash() を使用し div に class を適用します。:
$this->Session->setFlash('Example message text', 'default', array('class' => 'example_class'));
上述の例で $this->Session->flash() を使用した出力は次のようになります。:
<div id="flashMessage" class="example_class">Example message text</div>
$params 内でプラグインの使用を明示し、プラグイン内のエレメントを使用するには次のようにします。:
// /app/Plugin/Comment/View/Elements/flash_no_spam.ctp が使用されます
$this->Session->setFlash('Message!', 'flash_no_spam', array('plugin' => 'Comment'));
ノート
CakePHPは、デフォルトではフラッシュメッセージをHTMLエスケープしません。 もしリクエストやユーザーデータをフラッシュメッセージに含める場合は、 メッセージを整形するときにそれらを h でエスケープするべきです。