젠드 freamwork 2에서 플래시 메신저를 어떻게 사용할 수 있습니까? 세션 문서가 아직 없습니다. 누구든지 그것을 압니까? 그러나 세션 라이브러리가 있습니다.zf2의 플래시 메신저
답변
나는 얼마 전이 게시물을 작성했습니다. 찾을 수 있습니다 right here
기본적으로 이전과 똑같이 사용합니다.
<?php
public function commentAction()
{
// ... display Form
// ... validate the Form
if ($form->isValid()) {
// try-catch passing data to database
$this->flashMessenger()->addMessage('Thank you for your comment!');
return $this->redirect()->toRoute('blog-details'); //id, blabla
}
}
public function detailsAction()
{
// Grab the Blog with given ID
// Grab all Comments for this blog
// Assign the view Variables
return array(
'blog' => $blog,
'comments' => $comments,
'flashMessages' => $this->flashMessenger()->getMessages()
);
}
는 그런 다음로 .phtml 파일에이처럼 수행
// details.phtml
<?php if(count($flashMessages)) : ?>
<ul>
<?php foreach ($flashMessages as $msg) : ?>
<li><?php echo $msg; ?></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
당신이 모든 단일로 .phtml 파일에 대해이 작업을 수행 가지고 분명히이 모든 너무 편리하지 않다. 이 더 설명이 필요하면, 내 블로그를 참조하십시오
<?php
// layout.phtml
// First get the viewmodel and all its children (ie the actions viewmodel)
$children = $this->viewModel()
->getCurrent()
->getChildren();
$ourView = $children[0];
if (isset($ourView->flashMessages) && count($ourView->flashMessages)) : ?>
<ul class="flashMessages">
<?php foreach ($ourView->flashMessages as $fMessage) : ?>
<li><?php echo $fMessage; ?></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
,하지만 난 떨어져 레이아웃 frmo (코드 자체는 매우 분명하다 생각 : 따라서 레이아웃 내에서 그 일을 다음과 같이 기껏를해야한다. phtml 예제). 또는 뷰 템플릿 내부에서 좀 더 깔끔하게 보이도록 자신 만의 뷰 도우미를 자유롭게 작성할 수 있습니다.
Sam이 요청한대로보기 도우미 공유 코드에서 Flashmessenger의 메시지를 가져 오는 방법.
보기 도우미는 ServiceManagerAwareInterface 인터페이스 및 관련 메소드를 구현해야합니다. 이제 플러그인은 Service Locator를 얻고 궁극적으로 Flash Messenger에 액세스하는 데 사용할 수있는 Service Manager에 액세스 할 수 있습니다.
처음부터이 코드를 읽은 적이 없으므로 좀 더 우아한 방법이 있습니다.
protected function getMessages()
{
$serviceLocator = $this->getServiceManager()->getServiceLocator();
$plugin = $serviceLocator->get('ControllerPluginManager');
$flashMessenger = $plugin->get('flashmessenger');
$messages = $flashMessenger->getMessages();
// Check for any recently added messages
if ($flashMessenger->hasCurrentMessages())
{
$messages += $flashMessenger->getCurrentMessages();
$flashMessenger->clearCurrentMessages();
}
return $messages;
}
그리고 플러그인() 내에서 호출은 getMessages하는 부분에 전달하고 렌더링 할 수있는 메시지의 배열을 반환한다.
업데이트 :
젠드 프레임 워크의 새로운 버전이 경로에 FlashMessenger보기 도우미, 추가 /library/Zend/View/Helper/FlashMessenger.php
올드 답 :
내가 쓴 가지고 관례 인쇄 플래시 메시지 w 도우미,
namespace My\View\Helper;
use Zend\View\Helper\AbstractHelper;
class FlashMessages extends AbstractHelper
{
protected $flashMessenger;
public function setFlashMessenger($flashMessenger)
{
$this->flashMessenger = $flashMessenger ;
}
public function __invoke()
{
$namespaces = array(
'error' ,'success',
'info','warning'
);
// messages as string
$messageString = '';
foreach ($namespaces as $ns) {
$this->flashMessenger->setNamespace($ns);
$messages = array_merge(
$this->flashMessenger->getMessages(),
$this->flashMessenger->getCurrentMessages()
);
if (! $messages) continue;
$messageString .= "<div class='$ns'>"
. implode('<br />', $messages)
.'</div>';
}
return $messageString ;
}
}
/library/My/View/Helper/FlashMessages.php
에서 사용자 지정보기 도우미를 만들기
public function getViewHelperConfig()
{
return array(
'factories' => array(
'flashMessage' => function($sm) {
$flashmessenger = $sm->getServiceLocator()
->get('ControllerPluginManager')
->get('flashmessenger');
$message = new \My\View\Helper\FlashMessages() ;
$message->setFlashMessenger($flashmessenger);
return $message ;
}
),
);
}
/module/Application/Module.php
에서
다음 간단한 호출을 layout.phtml 또는보기.PHTML
echo $this->flashMessage();
날 컨트롤러 액션의 예를 보여 드리죠 홈 페이지에서
public function testFlashAction()
{
//set flash message
$this->flashMessenger()->setNamespace('warning')
->addMessage('Mail sending failed!');
//set flash message
$this->flashMessenger()->setNamespace('success')
->addMessage('Data added successfully');
// redirect to home page
return $this->redirect()->toUrl('/');
}
,이 의지 할 수
<div class="success">Data added successfully</div>
<div class="warning">Mail sending failed!</div>
희망을 인쇄! 오류 메시지를 렌더링 할 뷰 아래
추가 코드 : 만들기, 이전 요청에서
<?php echo $this->flashmessenger()
->setMessageOpenFormat('<div class="alert alert-danger"><ul%s><li>')
->setMessageCloseString('</li></ul></div>')
->render('error')
; ?>
는 당신이 컨트롤러에 아래의 코드를 실행하여 오류 메시지가 생성 :
$this->flashmessenger()->addErrorMessage('Whops, something went wrong...');
- 1. ZF2의 ViewModel
- 2. ZF2의 Zend_Db_Table_Abstract :: createRow()
- 3. zf2의 매퍼에 액세스 컨트롤러 플러그인
- 4. 젠드 프레임 워크 : 플래시 메신저, 모델의 메시지 추가
- 5. 메신저 objectFromJSONData
- 6. 메신저 태그 As3
- 7. ZF2의 부트 스트랩 파일은 어디에 있습니까?
- 8. ZF2의 컨트롤러 동작에서 다른 뷰를 렌더링하는 방법
- 9. ZF2의 Zend \ Db는 트랜잭션을 어떻게 제어합니까?
- 10. Android에서 sayHello (보기 v) "메신저 사용"메신저 사용 "예
- 11. 웹 메신저, 메신저, 채팅 클라이언트 - 재버 기반? (Facebook과 같은)
- 12. MVVM 라이트 툴킷 + 메신저
- 13. MSN 메신저 추가 기능
- 14. 메신저 포트 포워딩?
- 15. vb.net 메신저 오류
- 16. API를 지원하는 웹 메신저
- 17. VB.Net에서 IP 메신저 개발
- 18. phonegap에서 iOS 메신저 시작
- 19. 오픈 소스 인스턴트 메신저?
- 20. 메신저 포트 보호
- 21. iOS 메신저 SDK
- 22. Yahoo 메신저 라이브러리 C#
- 23. 간단한 LAN 메신저 만들기
- 24. 메신저 찾기 Hwnd
- 25. 루비 지역 내 메신저
- 26. C# : ASP.NET 웹 메신저 (채팅)
- 27. 블랙 베리 메신저 데스크톱 클라이언트
- 28. 은 메신저 계획을 구현하면서 사라졌습니다.
- 29. Facebook API : 메신저 화면 이름
- 30. 모바일 메신저 용 API가 있습니까?
나는 그것을 발견 메시지를 액세스하고 표시 할 수있는보기 도우미를 만들려면 매우 편리합니다. 관심있는 사람들을 위해 ServiceManagerAwareInterface를 구현 한 후 ServiceLocator를 통해 액세스 할 수있는 ControllerPluginManager에서 FlashMessenger를 가져 와서 수행 할 수 있습니다. 따라서 매번 작업에서 뷰 모델로 메시지를 전달할 필요가 없습니다. – DrBeza
현재 가지고 있다면 코드 공유는 어떨까요? :) 나는 이것이 익숙하지 않은 많은 사람들을 도와 줄 것이라고 확신한다. 방금 "마법"조력자의 기본 작업을 나열했습니다.) – Sam