1

レイアウトが 2 回表示されるという問題があるようです。これは、メイン アプリケーションではなく、特定のモジュールに対してのみ Zend Layout を使用するフロント コントローラー プラグイン (以下を参照) の何かによって引き起こされたのではないかと考えていました。どんな答えでも大歓迎です。ありがとう

class My_Controller_Plugin_AdoptLayout extends Zend_Controller_Plugin_Abstract

{

    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {

            $moduleName = $request->getModuleName();                

            if ($moduleName == 'some-module') {

                    if (!Zend_Layout::isEnabled()) {

                            $view = new Zend_View(array('encoding' => 'UTF-8'));
                            $view->addScriptPath(ROOT_DIR . '/modules/some-module/views/scripts/');
                        $view->doctype('XHTML1_STRICT');

                            $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view);
                        Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);  

                            Zend_Layout::startMvc();
                            $layout = Zend_Layout::getMvcInstance();
                            $layout->setLayout('default');
                            $layout->setLayoutPath(APPLICATION_PATH . '/modules/some-module/views/scripts/layouts/');
                            $layout->setView($view);                        
                    }

            }                                                           
    }

}

4

3 に答える 3

2

これは通常、私の経験ではErrorControllerが原因です。私は通常、ネストがないことを確認するために応答をクリアします。

public function errorAction() {

        $this->getResponse()->clearBody();

//handle error ........

}
于 2009-09-29T18:03:49.100 に答える
1

_forward を使用しているとき、または preDispatch プラグイン内で errorController にリダイレクトしたときに、この問題に遭遇しました。これらのことを確認できます。

また、私は次の行について少し疑わしいです:

$layout->setView($view);

それは必要ですか。Zend は自動的にビューをレイアウトに割り当てません。

于 2009-09-25T14:06:10.297 に答える
0

Ajax 呼び出しからアクションを呼び出し、レイアウトが 2 回呼び出される場合は、設定できます。

$this->_helper->layout->disableLayout();

アクションで。

私のプロジェクトでは、間違った ajax 呼び出しも行ったため、もう一度レンダリングされました。お役に立てれば

于 2012-02-27T12:51:26.160 に答える