セッションヘルパー

class SessionHelper(View $view, array $settings = array())

セッションコンポーネントの自然な対応として、セッションヘルパーはコンポーネントの大半の機能を、ビューの中で使用可能にします。セッションヘルパーはもはや自動的にビューに追加されることはありません。つまりコントローラー内の $helpers 配列に手動で追加する必要があります。

セッションヘルパーとセッションコンポーネントの大きな違いはヘルパーはセッションへの書き込みが 出来ない ことです。

セッションコンポーネントと同じく、データは ドット記法 の配列構造で読み込みます:

array('User' => array(
    'username' => 'super@example.com'
));

ご覧の配列構造には、ノードに User.username といった形で、ドット (.) で表された入れ子配列でアクセスします。

SessionHelper::read(string $key)
戻り値の型:mixed

セッションを読み込みます。文字列か配列か、セッションの内容によってどちらかを返します。

SessionHelper::check(string $key)
戻り値の型:boolean

セッションに指定のキーがあるか確認します。ブール型でキーの有無を返します。

SessionHelper::error()
戻り値の型:string

セッション内で最後に直面したエラーを返します。

SessionHelper::valid()
戻り値の型:boolean

セッションがビュー内で妥当が確認するのに使用します。

通知やフラッシュメッセージの表示

SessionHelper::flash(string $key = 'flash', array $params = array())
戻り値の型:string

通知メッセージの作成 で述べたように、フィードバック用にワンタイム通知を作成することが出来ます。メッセージを SessionComponent::setFlash() で作成したら表示したくなるでしょう。一度メッセージを表示すると、メッセージは削除され表示されなくなります:

echo $this->Session->flash();

上記はシンプルなメッセージを下記の html に沿って出力します:

<div id="flashMessage" class="message">
    Your stuff has been saved.
</div>

コンポーネントメソッドと同じく、追加プロパティをセットし使用する html 要素をカスタマイズすることも出来ます。コントローラー内で以下のようなコードを書くことも出来ます:

// in a controller
$this->Session->setFlash('The user could not be deleted.');

このメッセージを出力する時、メッセージを表示するのに使用する html 要素を選択出来ます:

// in a layout.
echo $this->Session->flash('flash', array('element' => 'failure'));

これは View/Elements/failure.ctp を使ってメッセージを書きます。メッセージテキストは html 要素内の $message として使用可能です。

フェイルオーバー用 html ファイルは以下のようになります:

<div class="flash flash-failure">
    <?php echo h($message); ?>
</div>

追加パラメーターを flash() メソッドに渡すことも出来ます。これによってカスタマイズしたメッセージを生成することが出来ます:

// In the controller
$this->Session->setFlash('Thanks for your payment');

// In the layout.
echo $this->Session->flash('flash', array(
    'params' => array('name' => $user['User']['name'])
    'element' => 'payment'
));

// View/Elements/payment.ctp
<div class="flash payment">
    <?php printf($message, h($name)); ?>
</div>

ノート

CakePHPは、デフォルトではフラッシュメッセージをHTMLエスケープしません。 もしリクエストやユーザーデータをフラッシュメッセージに含める場合は、 メッセージを整形するときにそれらを h でエスケープするべきです。