2

基本的に同一の 2 つのアクションがありますが、異なる 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';
    }
}

action-one.phtmlしかし、現在、Zend Framework はビュー スクリプトが見つからないと文句を言っています。actionOne のビュー スクリプトをレンダリングしたくありません。actionTwo のビュー スクリプトをレンダリングしたい。私は何をする必要がありますか?

4

1 に答える 1

3

を使用render()するとうまくいくようです:

public function actionOneAction()
{
    $this->actionTwoAction(); //execute the same code as actionTwoAction()
    $this->render('action-two'); //renders the same view as actionTwoAction()
}
于 2010-12-21T21:19:10.557 に答える