我从rob allens的'Zend_Auth登录/注销教程
中找到了这个帮助代码class Zend_View_Helper_LoggedInAs extends Zend_View_Helper_Abstract
{
public function loggedInAs()
{
$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()) {
$username = $auth->getIdentity()->WSLoginName;
$logoutUrl = $this->view->url(array('controller' => 'login',
'action' => 'logout', 'module' => 'member'), null, true);
return 'Welcome '. $username . '. <a href="'. $logoutUrl . '">Logout</a>';
}
$request = Zend_Controller_Front::getInstance()->getRequest();
$controller = $request->getControllerName();
$module = $request->getModuleName();
$action = $request->getActionName();
if($controller == 'login' && $action == 'index'){
return '';
}
$loginUrl = $this->view->url(array('controller' => 'login', 'action' => 'index'));
return '<a href="'. $loginUrl . '">Login</a>';
}
}
现在我的问题是,我将如何在同一模块内的不同控制器中使用此帮助程序?,因为显然,在上述教程中,此帮助程序在布局文件中使用,然后用户被重定向到indexController。当用户注销时,它会再次被重定向到登录页面..我的问题是这个,我在LoginController控制器和所述帮助器所在的同一模块中添加了一个新的Controller,这个新的控制器使用相同的布局文件正在调用该帮助程序,当我单击注销链接时,它不再起作用
答案 0 :(得分:2)
要使这项工作跨越不同的模块,您必须将其注册为“全局”帮助程序。为此,请在引导程序文件中的某处添加以下内容。
//Bootstrapping file..
//Initialize and/or retrieve a ViewRenderer object on demand via the helper broker
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
$viewRenderer->initView();
//add the global helper directory path
$viewRenderer->view->addHelperPath('/your/path/to/GlobalViewHelpers','My_View_Helper');
特别是,我想设置以下内容:
'/ your / path / to / GlobalViewHelpers'作为APPLICATION_PATH。“/ / / library / CompanyName / View / Helper”
和
'My_View_Helper'为'CompanyName_View_Helper'
之后,取出Rob Allen先生创建的代码并将其放在/ your / path / to / GlobalViewHelpers
中将类重命名为“My_View_Helper_LoggedInAs”
您应该能够拥有以下内容:
/application/layout/main.phtml
...
<body>
<div id='profile-panel'>
<?=$this->loggedInAs();?>
</div>
<?
$flashMessenger = Zend_Controller_Action_HelperBroker::getHelper('flashMessenger');
$this->messages = $flashMessenger->getMessages();
?>
...
此外,您必须更改几行代码以满足您的登录和注销所在地的需求。
<?php
class Zend_View_Helper_LoggedInAs extends Zend_View_Helper_Abstract
{
public function loggedInAs ()
{
$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()) {
$username = $auth->getIdentity()->username;
//CHANGE HERE: This should be your Logout page
$logoutUrl = $this->view->url(array('controller'=>'auth',
'action'=>'logout',
'module'=>'default'), null, true);
return 'Welcome ' . $username . '. <a href="'.$logoutUrl.'">Logout</a>';
}
$request = Zend_Controller_Front::getInstance()->getRequest();
$controller = $request->getControllerName();
$action = $request->getActionName();
//CHANGE HERE: This should be your login page
if($controller == 'auth' && $action == 'index') {
return '';
}
//CHANGE HERE: This is also your login page.
$loginUrl = $this->view->url(array(
'module'=>'default',
'controller'=>'auth',
'action'=>'index'));
return '<a href="'.$loginUrl.'">Login</a>';
}
}
?>
希望这有帮助。
来源:
http://akrabat.com/zend-auth-tutorial/
http://www.mixedwaves.com/2010/03/accessing-and-using-zend-view-helpers-from-a-common-directory/
答案 1 :(得分:1)
您的退出操作位于控制器中。您必须具有如下所示的路由:/ module / controller / logout /。在您的帮助程序中使用此路由作为注销URL。现在,无论您何时注销,都会被重定向到注销操作。