[英]view helper in zend framework
我從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,並且該新控制器使用的布局文件位於該助手正在被調用,當我單擊注銷鏈接時,它不再起作用
要使此模塊適用於不同的模塊,您必須將其注冊為“全局”幫助器。 為此,請將以下內容添加到您的引導文件中。
//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/
您的注銷操作在控制器中。 您必須具有如下所示的路由:/ module / controller / logout /。 在您的助手中使用此路由作為注銷URL。 現在,無論您從哪里注銷,都可以重定向到注銷操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.