簡體   English   中英

在zend框架中查看幫助器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM