Zend Framework: как сделать другое действие? - PullRequest
2 голосов
/ 21 декабря 2010

У меня есть два действия, которые по существу идентичны, но нуждаются в разных URL. Обычно я использовал бы _forward() для рендеринга другого действия:

class MyController extends Zend_Controller_Action
{
    public function actionOneAction()
    {
        $this->_forward('action-two');
    }

    public function actionTwoAction()
    {
        $this->view->foobar = 'foobar';
    }
}

Однако у меня есть некоторый код, который происходит в preDispatch(), который я хочу выполнить только один раз:

class MyController extends Zend_Controller_Action
{
    public function preDispatch()
    {
        //execute this only once before actionOne or actionTwo, but not both
    }

    public function actionOneAction()
    {
        $this->_forward('action-two'); //this won't work because preDispatch() will get called a second time
    }

    public function actionTwoAction()
    {
        $this->view->foobar = 'foobar';
    }
}

Так что я подумал, что, возможно, я мог бы просто вызвать функцию напрямую, например так:

class MyController extends Zend_Controller_Action
{
    public function preDispatch()
    {
        //execute this only once before actionOne or actionTwo, but not both
    }

    public function actionOneAction()
    {
        $this->actionTwoAction(); //execute the same code as actionTwoAction()
    }

    public function actionTwoAction()
    {
        $this->view->foobar = 'foobar';
    }
}

Но теперь Zend Framework жалуется на то, что не может найти скрипт action-one.phtml view. Я не хочу отображать скрипт вида actionOne. Я хочу сделать скрипт вида actionTwo. Что мне нужно сделать?

1 Ответ

3 голосов
/ 22 декабря 2010

Использование render(), кажется, помогает:

public function actionOneAction()
{
    $this->actionTwoAction(); //execute the same code as actionTwoAction()
    $this->render('action-two'); //renders the same view as actionTwoAction()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...