2016-09-21 11 views
0

phalconのデフォルトのフラッシュメッセージングサービスでは、デフォルトのエラーdivのみを提供します。ファルコンのフラッシュメッセージにデフォルトのテキストを追加

<div class="alert alert-warning">Our message</div> 

しかし、このようなdivボックス内に何かを追加したいと思います。

<div class="alert alert-warning"> <button class="close">x</button> Our Message </div> 

しかし、私たちの知る限り、ファルコンは各メッセージのクラスだけを設定することができます。

$di->set('flash', function() { 
    return new FlashSession([ 
     'error' => 'alert alert-danger alert-dismissible', 
     'success' => 'alert alert-success alert-dismissible', 
     'notice' => 'alert alert-info alert-dismissible', 
     'warning' => 'alert alert-warning alert-dismissible' 
    ]); 
}); 

すべてのメッセージにその閉じるボタンを追加する設定や方法がありますか。その場合、私は変更する必要があるように、将来的には、私は閉じるボタンのクラスを変更する必要がすることができるので、私はすべてのフラッシュメッセージでこの閉じるボタンを追加する必要はありませんしかし、私は

message = '<button class="close-btn">x</button>'+message 

ような何かをしたいですすべてのプロジェクトから。

答えて

0

Phalcon \ FlashSessionクラスを拡張し、outputMessage()メソッドをオーバーライドするか、独自のFlashコンポーネントを作成して、必要なHTMLを出力します。カスタムフラッシュコンポーネントの例は以下の通りですが、Falconで開発するときに同様のクラスを使用しますが、このコンポーネントはDIにセッションコンポーネントが存在することを前提としています。

これはテストされていませんが、原則的に、出力HTMLに閉じるボタンを追加することができます。また、関連するメソッド(エラー、成功、警告、情報)。

使用例:

// settings messages in your controllers/components 
// 2nd param defines a position 
$this->flashMessage->error('Something is bad!', 'form_top'); 
$this->flashMessage->success('Something is right!'); 
$this->flashMessage->info('Something is interesting!'); 
$this->flashMessage->warning('Something is worrying!'); 

// rendering messages in your views 
// 1st param will render messages for a specific position if a position was set 
$this->flashMessage->render(); 
$this->flashMessage->render('form_top'); 

例クラス:あなたが望むように

class FlashMessage extends Phalcon\Mvc\User\Component 
{  
    /** 
    * @var array 
    **/ 
    public $classmap = array(); 

    /** 
    * Sets defaults for the class map (optional) 
    * 
    * @param array $classmap 
    **/ 
    public function __construct($classmap = array()) { 

     // -- set the defaults 
     $this->classmap = array(
      'error' => 'flash_message-error', 
      'success' => 'flash_message-success', 
      'info' => 'flash_message-info', 
      'warning' => 'flash_message-warning' 
     ); 

     // -- set new class map options (also optional) 
     if (!empty($classmap)) { 
      foreach ($classmap as $key => $value) { 
       $this->classmap[$key] = $value; 
      } 
     } 
    } 

    /** 
    * error(), success(), info(), warning() 
    * Sets the flash messages 
    * 
    * @param string message 
    * @param string position 
    * @return string 
    **/ 
    public function error($message, $position = '') 
    { 
     $this->session->flashMessage = array(
      'position' => $position, 
      'message' => '<div class="' . $this->classmap['error'] . '"> 
       ' . $message . ' 
      </div> 
     '); 
    } 

    public function success($message, $position = '') 
    { 
     $this->session->flashMessage = array(
      'position' => $position, 
      'message' => '<div class="' . $this->classmap['success'] . '"> 
       ' . $message . ' 
      </div> 
     '); 
    } 

    public function info($message, $position = '') 
    { 
     $this->session->flashMessage = array(
      'position' => $position, 
      'message' => '<div class="' . $this->classmap['info'] . '"> 
       ' . $message . ' 
      </div> 
     '); 
    } 

    public function warning($message, $position = '') 
    { 
     $this->session->flashMessage = array(
      'position' => $position, 
      'message' => '<div class="' . $this->classmap['warning'] . '"> 
       ' . $message . ' 
      </div> 
     '); 
    } 

    /** 
    * Check if theres messages in the session to render 
    * 
    * @param string $position 
    * @return bool 
    **/ 
    public function hasMessage($position = null) 
    { 
     if (isset($this->session->flashMessage) && !empty($position)) { 
      return $this->session->flashMessage['position'] == $position ? true : false ; 
     } else { 
      return $this->session->flashMessage ? true : false ; 
     } 
    } 

    /** 
    * Renders the flash message 
    * 
    * @param string $position 
    * @return string 
    **/ 
    public function render($position = null) 
    { 
     // -- store the message locally 
     $message = $this->session->flashMessage; 

     // -- check if there is in fact a flashed message 
     if (empty($message)) 
      return; 

     // -- then remove from the session 
     $this->session->remove('FlashMessage'); 

     // -- if no position the just return the message 
     if (is_null($position)) { 

      return $message['message']; 

     // -- else return the requested position 
     } elseif ($position == $message['position']) { 

      return $message['message']; 
     } 
    } 
} 
0

私はこのようなものを使用していますが、あなたはそれを拡張することができます。しかし、これはどのように動作するかの要点です。

class Messenger extends Component 
{ 
    protected static $_messageCloseHtml = '<a href="#" class="close" data-dismiss="alert" aria-label="close" title="close">&times;</a>'; 

    /** 
    * @param array|string $messages 
    */ 
    public static function flashError($messages) 
    { 
     $messages = !is_array($messages) ? [$messages] : $messages; 

     foreach ($messages as $message) { 
      \Phalcon\Di::getDefault()->get('flashSession')->error(self::_getBody($message)); 
     } 
    } 

    /** 
    * @param string $message 
    * @return string 
    */ 
    protected static function _getBody($message) 
    { 
     return self::$_messageCloseHtml . $message; 
    } 
} 

メッセージごとに、メッセージにHTMLコードを追加できます。

私のflashErrorは、エラーメッセージ用です。 warninginfoおよびsuccessに同じメソッドコードを追加できます。

基本的には(既存の)FlashSessionを拡張し、メッセージを割り当てるときは、メッセージに追加のテキストやHTMLを追加するグローバルメソッドを呼び出します。

関連する問題