如何获取参数取决于您所在的位置,
您不必捕获请求$param来实现您想要做的事情。您只需使用FlashMessenger助手将消息添加到堆栈中。然后在您想要显示消息的操作中检索消息,然后像我在successAction中那样将其分配给视图。请记住,您可以通过在控制器中分配任何$var或数据数组来传递它,例如:$this->view->var = $var; 在视图中,它将被访问为$this->var。
由于您询问了登录问题,我将向您展示我通常的做法。并不是最好的方法。
我的LoginController的索引视图包含表单:
public function indexAction() {
$form = new Zfcms_Form_Login;
$this->view->form = $form;
if ($this->getRequest()->isPost()) {
if ($form->isValid($this->getRequest()->getPost())) {
$values = $form->getValues();
$authAdapter = $this->getAuthAdapter();
$username = $values['username'];
$password = $values['password'];
$authAdapter->setIdentity($username)
->setCredential($password);
$auth = Zend_Auth::getInstance();
$result = $auth->authenticate($authAdapter);
if ($result->isValid()) {
$userInfo = $authAdapter->getResultRowObject(null, 'password');
$authStorage = $auth->getStorage();
$authStorage->write($userInfo);
$session = new Zend_Session_Namespace('zfcms.auth');
if (isset($session->requestURL)) {
$url = $session->requestURL;
unset($session->requestURL);
$this->_redirect($url);
} else {
$this->_helper->getHelper('FlashMessenger')
->addMessage('You were successfully logged in as ' . $userInfo->username);
$this->_redirect('/login/success');
}
} else {
$this->view->message = 'You could not be logged in. Please try again.';
}
}
}
}
在成功的操作中,我们这样做:
public function successAction() {
if ($this->_helper->getHelper('FlashMessenger')->getMessages()) {
$this->view->messages = $this->_helper
->getHelper('FlashMessenger')
->getMessages();
} else {
$this->_redirect('/login/success');
}
}
在视图脚本中,我们可以像下面这样做一些事情。我这样做的原因是有时候在控制器中只会传递一个单独的消息,在这种情况下,我简单地使用:
$this->view->message = 'message goes here'
如果在视图中都设置了它们,那么就同时捕获它们:
<?php
if(isset($this->message) || isset($this->messages)):
?>
<?php
if(is_array($this->messages))
{
echo implode($this->messages);
} else {
echo $this->message;
}?>
<?php
endif
?>