visualizza helper in zend framework

Ho trovato questo codice helper da Zend_Auth tutorial / logout tutorial di rob allens

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(arrays('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(arrays('controller' => 'login', 'action' => 'index')); return '<a href="'. $loginUrl . '">Login</a>'; } } 

ora la mia domanda è, come userò questo helper in un controller diverso, all'interno dello stesso module?, perché apparentemente, in questo tutorial, questo helper è usato in un file di layout, e quindi l'utente viene reindirizzato a indexController. quando l'utente si disconnette, viene nuovamente reindirizzato alla pagina di accesso. Il mio problema è questo, ho aggiunto un nuovo controller all'interno dello stesso module in cui si trovano il controller LoginController e l'helper specificato e questo nuovo controller sta utilizzando lo stesso file di layout where quell'helper viene chiamato, quando ho cliccato sul link di output, non funziona più

Per fare in modo che funzioni su diversi moduli, dovrai registrarlo come un helper "globale". Per fare ciò, aggiungi quanto segue da qualche parte nel tuo file bootstrap.

 //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'); 

In particolare, mi piace impostare il seguente:

'/ your / path / to / GlobalViewHelpers' come APPLICATION_PATH. "/../ library / CompanyName / View / Helper"

e

"My_View_Helper" come "CompanyName_View_Helper"

Successivamente, prendi il codice creato dal signor Rob Allen e inseriscilo in / your / path / to / GlobalViewHelpers

Rinominare la class in "My_View_Helper_LoggedInAs"

Dovresti essere in grado di avere il seguente:

/application/layout/main.phtml

 ... <body> <div id='profile-panel'> <?=$this->loggedInAs();?> </div> <? $flashMessenger = Zend_Controller_Action_HelperBroker::getHelper('flashMessenger'); $this->messages = $flashMessenger->getMessages(); ?> ... 

Inoltre, dovrai modificare alcune righe di codice per soddisfare le tue esigenze fino a where vivono i tuoi dati di accesso e di output.

 <?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(arrays('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(arrays( 'module'=>'default', 'controller'=>'auth', 'action'=>'index')); return '<a href="'.$loginUrl.'">Login</a>'; } } ?> 

Spero che questo ti aiuti.

fonti:

http://akrabat.com/zend-auth-tutorial/

http://www.mixedwaves.com/2010/03/accessing-and-using-zend-view-helpers-from-a-common-directory/

La tua azione di disconnessione è in un controller. Devi avere un path simile a questo: / module / controller / logout /. Usa questo path nel tuo helper come URL di disconnessione. Ora da where ti disconnetti, verrai reindirizzato all'azione di disconnessione.