DatsunBing
DatsunBing

Reputation: 9076

Zend Framework - How to call controller's redirect() from within an action helper

I am doing an ACL check in the preDispatch method of an Action Helper. When it fails, I want to call the action controller's _redirect method however I am having difficulty doing this.

In the comments attached to this post, zend-framework, call an action helper from within another action helper, I see two solutions. In the first, the controller is accessed from the helper as $this->_actionController. In the second, it is accessed using $this->getActionController().

I tried both of the following:

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

In either case I get 'Method "_redirect" does not exist ...'. Are there perhaps restrictions on which controller methods can be accessed from the action helper?

Upvotes: 6

Views: 7838

Answers (3)

Kottakji
Kottakji

Reputation: 113

Why not use :

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

Or :

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

Upvotes: 0

Marcin
Marcin

Reputation: 238139

There is Redirector action helper that you could use in your action helpers. For example:

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

Controller's _redirect method is just a wrapper to the Redirector's gotoUrl method.

Upvotes: 14

bensiu
bensiu

Reputation: 25564

example how to do it in preDispatch():

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

Upvotes: 0

Related Questions