2016-09-21 9 views
0

팔콘 기본 플래시 메시징 서비스에는 기본 오류 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을 출력 할 수 있습니다. 커스텀 플래시 컴포넌트의 예제는 아래와 같습니다. 우리는 팔콘으로 개발할 때 비슷한 클래스를 사용합니다.이 컴포넌트는 DI에 세션 컴포넌트의 존재를 가정합니다.

이것은 테스트되지 않았지만 원칙적으로 코드는 출력 HTML에 닫기 버튼을 추가하거나 각 메시지 유형에 대해 관련 메서드 (오류, 성공, 경고, 정보)로 특정 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은 오류 메시지입니다. warning, infosuccess에 대해 동일한 메소드 코드를 추가 할 수 있습니다.

기본적으로 (기존) FlashSession을 확장하고 메시지를 할당 할 때 메시지에 추가 텍스트 또는 html을 추가하는 전역 메소드를 호출합니다.