2011-04-04 21 views
6

Estoy haciendo una verificación de ACL en el método preDispatch de un Ayudante de acción. Cuando falla, quiero llamar al método _redirect del controlador de acción, sin embargo, tengo dificultades para hacerlo.Zend Framework - Cómo llamar a la redirección del controlador() desde dentro de un helper de acción

En los comentarios adjuntos a esta publicación, zend-framework, call an action helper from within another action helper, veo dos soluciones. En el primero, se accede al controlador desde el helper como $ this -> _ actionController. En el segundo, se accede usando $ this-> getActionController().

me trataron ambos de los siguientes:

$this->_actionController->_redirect('/'); 
$this->getActionController()->_redirect('/'); 

En cualquier caso me sale 'método 'método _redirect' no existe ...'. ¿Hay quizás restricciones sobre qué métodos de controlador se puede acceder desde el asistente de acción?

Respuesta

14

Hay Redirector action helper que se puede utilizar en sus ayudantes de acción. Por ejemplo:

class My_Controller_Action_Helper_Test extends Zend_Controller_Action_Helper_Abstract { 

    public function preDispatch() { 
     $redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('Redirector');   
     $redirector->gotoUrl('/url'); 
    }    
} 

del controlador _redirect method es sólo un envoltorio con el método de la redirector gotoUrl.

0

ejemplo de cómo hacerlo en preDispatch():

$request = $this->getActionController()->getRequest(); 
$urlOptions = array('controller' => 'auth', 
        'action' => 'login'); 
$redirector = new Zend_Controller_Action_Helper_Redirector(); 
$redirector->gotoRouteAndExit($urlOptions, null, true); 
0

Por qué no usar:

$this->_response->setRedirect('/login'); 
$this->_response->sendResponse(); 

O:

$this->_request->setModuleName('default'); 
$this->_request->setControllerName('error'); 
$this->_request->setActionName('404'); 
Cuestiones relacionadas