2011-02-01 6 views
3

FlashMessenger 도우미를 사용하여 Zend Framework에서 (경고, 성공, 오류) 플래시 메시지를 분류하는 가장 쉬운 방법은 무엇입니까? 또한 컨트롤러가 반드시 요청을 전달하지 않을 수도있는 메시지를 확인하는 단일 메서드가 필요합니다. 지금이, 나는 FlashMessenger :: getCurrentMessage()를 통해 이루어 졌다고 생각합니까?Zend Framework의 FlashMessenger 메시지 분류

+0

이를 수행하는 다른 방법은 다음에서 찾을 수 있습니다. http://stackoverflow.com/questions/3950637/type-of-flash-messenger-in-zend – Gardner

답변

10

당신은 당신이 할 수있는 컨트롤러있어에서 :

<?php echo $this->flashMessenger('notice'); ?> 

그리고이 같은 오류 :

$this->_helper->FlashMessenger(
    array('error' => 'There was a problem with your form submission.') 
); 
$this->_helper->FlashMessenger(
    array('notice' => 'Notice you forgot to input smth.') 
); 

당신이 볼 수있는 당신은이 같은 통지를 에코 할 수 있습니다

<?php echo $this->flashMessenger('error'); ?> 

편집 :

확인 this link :

... 여기에서 일반 getMessages() 메소드를 호출하면 작동하지 않습니다. 이는 FlashMessenger가 인스턴스화 될 때 적절한 ZendSession 네임 스페이스에 저장된 메시지 만 반환합니다. 이 요청을 추가 한 모든 메시지는 그 당시 ZendSession 네임 스페이스에 없었으므로 (FlashMessenger가 메시지를 추가하기 위해 인스턴스화되었으므로) getMessages()에 의해 반환되지 않습니다.

이 사용 사례의 경우 FlashMessenger는 현재 요청에 설정된 메시지를 반환하는 getCurrentMessages() 메서드 (및 현재 메서드의 관련 패밀리)도 제공합니다.

2

두 가지 아이디어. 로버트 기본으로

1. PHPPlaneta

체크 아웃 PHPlaneta의 소스 코드를 :

https://github.com/robertbasic/phpplaneta

그는 표준 FlashMessenger 액션 도우미 사용

$this->_helper->flashMessenger()->addMessage(array('fm-bad' => 'Error occurred')

을 그런 다음 뷰 도우미를 정의합니다. 그는 메시지에 액세스 할 수 있도록 FlashMessenger이라고합니다. 자신의 레이아웃이나 뷰 스크립트에서 그는 단순히 호출 출력 메시지에 대한 CSS 스타일을 설정 :

<?php echo $this->flashMessenger(); ?>

뷰 도우미가 키 ('fm-bad' 예)를 사용합니다.

2 PriorityMessenger 숀 PO MacCath - 모란에서 우선 순위 메신저보기 도우미 밖으로

확인 :

http://emanaton.com/code/php/zendprioritymessenger

내가 이것에 대해 좋아하는 점은 그 메시지를 저장하는이 모든 사업 다음 페이지로드에 표시하기 위해 완전히 내면에 있어야하는 무언가로 나를 강타합니다. 따라서 리디렉션 전에 메시지와 우선 순위를보기 도우미로 채 웁니다.그런 다음 레이아웃 또는보기 스크립트에서 동일한보기 도우미를 통해 해당 메시지를 우선 순위와 함께 출력합니다.

2

모두의 의견에 감사드립니다. 그러나 저는 다른 접근 방식을 구현했습니다.

저는 이미 애플리케이션 전반에 공통 로직을 배치 한 Zend_Controller_Action을 확장하는 상위 컨트롤러를 가지고 있으므로 postDispatch() 메소드에서 getCurrentMessages 및 getMessages를 뷰 변수에 병합했습니다.

public function postDispatch() 
{ 
    $messages = array_merge(
     $this->_helper->flashMessenger->getCurrentMessages(), 
     $this->_helper->flashMessenger->getMessages() 
    ); 
    $this->view->messages = count($messages) > 0 ? $messages[0] : array(); 
} 

다음과 같은 컨트롤러 동작을 통해 메시지를 설정합니다.

$this->_helper->flashMessenger(array('error'=>'This is an error')); 

그리고 레이아웃 파일에서 $ messages 변수에 조건문을 사용합니다.

<?php if(count($this->messages) > 0) : ?> 
//.. my HTML e.g. key($this->messages) returns 'error' 
// current($this->messages) returns 'This is an error' 
<?php endif; ?> 

이 메시지가 분류되고 다음 리디렉션에 추가하여 현재 요청에서 얻을 수 있습니다 나를 위해 작동합니다.

관련 문제