Переадресация другому действию / контроллеру перед предварительной отправкой с Zend Framework - PullRequest
1 голос
/ 04 апреля 2011

У меня есть что-то вроде

<?php
class AccountController extends Zend_Controller_Action
{
    public function init()
    {
        if(!Zend_Auth::getInstance()->hasIdentity()) {
            //need to forward to the auth action in another controller,
            //instead of dispatching to whatever action it would be dispatched to
        }
    }
...

Я не могу использовать $ this -> _ forward ("action"), потому что действие auth не в том же контроллере и в init, перенаправление должнобыть за действие в том же контроллере.Есть идеи?

$request->setModuleName('module')
            ->setControllerName('controller')
            ->setActionName('action');

тоже не работает.Я пытался очистить параметры, но все равно у меня ничего нет.

Ответы [ 2 ]

5 голосов
/ 04 апреля 2011

Поместите его в Плагин переднего контроллера

class My_Auth_Plugin extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch($request)
    {
        if(!Zend_Auth::getInstance()->hasIdentity()) {
            $request->setModuleName('module')
            ->setControllerName('controller')
            ->setActionName('action');
        }
    }
}

Возможно, вы захотите перенаправить вместо «пересылки», вы можете использовать помощник по перенаправлению.

$this->_helper->redirector('action', 'controller', 'module');

Обратите внимание, что это основное использование помощника по перенаправлению, вы также можете использовать метод goToRoute (), который позволяет использовать пользовательские маршруты.
Вот подпись метода:

public function gotoRoute(array $urlOptions = array(), $name = null, 
    $reset = false, $encode = true)

Использование похоже на помощник вида url()

2 голосов
/ 04 апреля 2011

Есть несколько параметров для _forward.

$this->_forward($action, $controller, $module, $params)

Если контроллер равен нулю, то действие будет в вызываемом контроллере.Если модуль равен нулю, то контроллер будет в вызываемом модуле.

param - массив параметров.Я склонен передать $this->_request->getParams().

...