【问题标题】:Zend Framework Render different view within module/controllerZend Framework 在模块/控制器中呈现不同的视图
【发布时间】:2011-10-06 11:49:20
【问题描述】:

我正在使用各种模块和父控制器来保持一致性。

我的父控制器有一堆常用操作,每个后续子控制器都需要访问这些操作。我发现很难让这个默认操作呈现正确的视图。

我不想为我的每个模块添加相同的视图 - 这会破坏对象 - 但我希望在某处有一个默认视图。

我试过了:

$this->_forward('commonaction', 'baselayout', 'default');

这对我不起作用 - 因为它试图再次处理操作 - 当我已经在我的父控制器中填充了所需的变量时。

任何帮助都会很棒。

更新:

为了澄清我希望能够使用来自不同模块的通用视图。当前,所有示例和解决方案都采用一个通用模块。这对我不起作用。

【问题讨论】:

  • 我已经更新了我的答案。 Aurelio 走在了正确的轨道上,但是在当前模块之外使用视图脚本需要设置添加脚本路径。

标签: php zend-framework


【解决方案1】:

我使用以下方法修复了它:

$this->_helper->viewRenderer->renderBySpec('foo', array('module' => 'modulename', 'controller' => 'controllername')); 

【讨论】:

    【解决方案2】:

    在你的控制器中使用这个语句:

    // Render 'foo' instead of current action script
    $this->_helper->viewRenderer('foo');
    
    // render form.phtml to the 'html' response segment, without using a
    // controller view script subdirectory:
    $this->_helper->viewRenderer('form', 'html', true);
    

    来自官方文档http://framework.zend.com/manual/en/zend.controller.actionhelpers.html

    不可能(据我所知)显示不同模块的视图。另外官方文档中也没有这个问题的痕迹。

    【讨论】:

    • 嘿 Aurelio - 感谢此解决方案的主要问题是它仍然在我当前所在的同一模块中查找视图。这是错误的。我需要能够说我想要从模块 Y 渲染的视图 X。
    • 对不起。我理解相同的模块但不同的控制器。
    • 啊,好吧,我的错。将相应地更新我的问题。你知道这是否可能吗?
    【解决方案3】:

    和你一样,我有多个模块,想在不同模块的控制器中呈现任意视图(驻留在一个模块中)。

    在尝试了很多方法之后,这是我让它工作的唯一方法:

    控制器动作:

    public function xyzAction()
    {
        $this->_helper->layout->disableLayout();
        $view = new Zend_View();
        $view->setScriptPath(APPLICATION_PATH . '/modules/moduleB/views/scripts/abcBlahBlah');
        echo $view->render('yadaYada.phtml');
        exit;
    }
    

    【讨论】:

      【解决方案4】:

      在您的操作中尝试以下操作:

      • 首先指定存储视图脚本的模块的路径
      • 然后将视图脚本的名称指定给视图渲染器

      见以下代码:

      // Add a script path to the directory in the other module
      $this->view->addScriptPath(APPLICATION_PATH . '/modules/baselayout/views/scripts');
      // Tell the viewRenderer to use the view script 'scriptname'
      $this->_helper->viewRenderer('scriptname');
      

      【讨论】:

        【解决方案5】:

        你可以试试(Zend Doc):

         $View = new Zend_View();
         $View->addScriptPath('/path/to/script');
        

        【讨论】:

        • 这真的不是 OP 所要求的。设置脚本路径不会呈现不同的视图。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多