Phalcon

Phalconのフラッシュメッセージ

更新日:

今日は、Phalconのフラッシュメッセージについて調べてみます。

フラッシュメッセージは、単にユーザに情報を表示するアクションの状態をユーザに通知するために使用されます。メッセージのこれらの種類は、このコンポーネントを使用して生成することができます。

アダプタ

このコンポーネントは、フラッシャーに渡された後、メッセージの動作を定義するためのアダプタを使用します

Adapter 説明 API
Direct 直接フラッシャーに渡されたメッセージを出力します Phalcon\Flash\Direct
Session 一時的にセッション内にメッセージを格納し、メッセージは次のリクエストで出力することができます Phalcon\Flash\Session

使い方

あなたがPhalcon\DI\FactoryDefaultを使用している場合、通常のFlashメッセージングサービスは、サービスコンテナから要求され、その後、Phalcon\Flash\Directは、自動的に「フラッシュ」サービスとして登録されています。

<?php
//flashサービスのセットアップ
$di->set('flash', function() {
 return new \Phalcon\Flash\Direct();
});

この方法では、必要な範囲でサービスを注入することにより、コントローラやビューでそれを使用することができます。

<?php
class PostsController extends \Phalcon\Mvc\Controller
{
public function indexAction()
 {
}
public function saveAction()
 {
 $this->flash->success("The post was correctly saved!");
 }
}

サポートされている4つの組み込みのメッセージ·タイプがあります。

<?php
$this->flash->error("too bad! the form had errors");
$this->flash->success("yes!, everything went very smoothly");
$this->flash->notice("this a very important information");
$this->flash->warning("best check yo self, you're not looking too good.");

あなたは、あなた自身のタイプとメッセージを追加することができます。

フラッシャーに送信されたメッセージは自動的にHTMLでフォーマットされています。

<?php
$this->flash->message("debug", "this is debug message, you don't say");

メッセージの出力

フラッシャーに送信されたメッセージは自動的にHTMLでフォーマットされています。

<div class="errorMessage">too bad! the form had errors</div>
<div class="successMessage">yes!, everything went very smoothly</div>
<div class="noticeMessage">this a very important information</div>
<div class="warningMessage">best check yo self, you're not looking too good.</div>

図から分かるように、また、いくつかのCSSクラスをdivタグに自動的に追加されます。これらのクラスは、ブラウザ内のメッセージのグラフィカルなプレゼンテーションを定義することができます。CSSクラスをオーバーライドすることができますが、Twitterのブートストラップを使用している場合、例えば、クラスのように設定することができます。

<?php
//フラッシュサービスにカスタムCSSクラスの登録
$di->set('flash', function(){
 $flash = new \Phalcon\Flash\Direct(array(
 'error' => 'alert alert-error',
 'success' => 'alert alert-success',
 'notice' => 'alert alert-info',
 ));
 return $flash;
});

次のようにメッセージが印刷されます:

<div class="alert alert-error">too bad! the form had errors</div>
<div class="alert alert-success">yes!, everything went very smoothly</div>
<div class="alert alert-info">this a very important information</div>

暗黙のフラッシュ対セッション

メッセージを送信するために使用されるアダプタに応じて、出力を直接生成することができ、または一時的に後に示すように、セッションにメッセージを格納する。いつ各を使用する必要がありますか?つまり、通常のメッセージを送信した後にあなたが行うリダイレクションの種類によって異なります。たとえば、あなたが "前進"を作る場合には、セッション内のメッセージを保存する必要はありませんが、あなたはそれからHTTPリダイレクトを行う場合、彼らは、セッションに格納する必要があります。

<?php
class ContactController extends \Phalcon\Mvc\Controller
{
public function indexAction()
 {
}
public function saveAction()
 {
//ポストを保存
//ダイレクトフラッシュの使用
 $this->flash->success("Your information were stored correctly!");
//indexアクションの前へ
 return $this->dispatcher->forward(array("action" => "index"));
 }
}

またはHTTPリダイレクトを使用して:

<?php
class ContactController extends \Phalcon\Mvc\Controller
{
public function indexAction()
 {
}
public function saveAction()
 {
//store the post
//セッションフラッシュの使用
 $this->flashSession->success("Your information were stored correctly!");
//完全なHTTPリダイレクションの作成
 return $this->response->redirect("contact/index");
 }
}

このケースでは、対応するビューで手動でメッセージを出力する必要があります。

<!-- app/views/contact/index.phtml -->
<p><?php $this->flashSession->output() ?></p>

'flashSession'属性はフラッシュが以前に依存性注入コンテナにセットした方法です。あなたは、セッションを成功裏にflashSessionメッセンジャーを使用するために最初に起動する必要があります。

本日のまとめ

  • フラッシャーには、DirectとSessionの2つのアダプタがある
  • Directは直接渡されたメッセージを出力する
  • Sessionは、一時的にセッション内にメッセージを保存する
  • Phalcon\DI\FactoryDefaultを使用している場合(Develeper Toolsで自動生成した場合)は、Directがデフォルトで設定されている
  • デフォルトでは、4つ(error,success,notice,warning)の組み込みメッセージタイプがある
  • 上記の組み込みメッセージには自動的にdivタグのCSSクラス名が割り振られている
    • error → class="errorMessage"
    • success → class="successMessage"
    • notice → class="noticeMessage"
    • warning → class="warningMessage"
  • フラッシャーのメッセージタイプを追加するには、messageメソッドの、第1引数に、メッセージタイプ名、第2引数に、メッセージの内容を記述する
  • フラッシャーにSessionを使用する場合は、DIコンテナにセットします。
  • Developer Toolsデフォルトのファイル構造の場合は、app/config/services.phpに下記を追加します。
    2015-04-17 17-35-00

    • 上記例は、Twitter BootstrapでのCSSクラス名を割り振っています。
  • 下記にメッセージ保存例を記述します。
    2015-04-17 17-24-48
  • そして、上記のフラッシャーは、outputメソッドで、出力します。
    • <p><?php echo $this->flash->output();?></p>
  • 上記例は、下記のように表示されます。
    2015-04-17 17-40-19

本日は、以上です。

-Phalcon

Copyright© WinRoad徒然草 , 2018 All Rights Reserved Powered by AFFINGER5.