【问题标题】:view loading "by hand" in zend在 zend 中查看“手动”加载
【发布时间】:2011-12-14 19:49:59
【问题描述】:

我正在使用 zend 框架并尝试从控制器内部创建和呈现视图。通常这个过程是由框架处理的,但我想我也可以作为documentation states的这一部分自己做。

不幸的是,由于框架仍在尝试加载默认视图,因此出现了问题。这是我的控制器

<?php

class ViewController extends Zend_Controller_Action {

    private $viewsFolder = null;

    public function init()
    {
        $this->viewsFolder = realpath(dirname(__FILE__)) . '/../views/custom/';
    }

    public function indexAction()
    {

        // using a custom view (initialization and rendering executed by hand)
        $view = new Zend_View();

        $view->setScriptPath($this->viewsFolder);

        $view->assign(array(
            "dev_name" => "Fabs",
            "framework" => "Zend frmwrk"
        ));

        echo $view->render('customView.phtml');
    }
}

这是我得到的错误

Message: script 'view/index.phtml' not found in path (/home/ftestolin/stuff/rubrica/application/views/scripts/)

看起来无法抑制普通视图渲染。知道怎么做吗?

【问题讨论】:

  • 18 个问题和 1 个接受的答案 - 整理出来。

标签: php zend-framework


【解决方案1】:

最好禁用ViewRenderer 而不是删除它。在控制器中:

$this-&gt;_helper-&gt;viewRenderer-&gt;setNoRender(true);

请记住,ViewRendererZend_Form 实例为自己的渲染提取默认视图的位置。删除ViewRenderer 意味着稍后需要在表单需要呈现时重新实例化它。但是当它这样做时,它会重新创建一个全新的 Zend_View 实例。您应用于视图的任何设置(例如,在引导时、设置文档类型等)都将丢失。

【讨论】:

    【解决方案2】:

    好的,我会回答自己:)

    必须阻止 Zend_Controller_Action_Helper_ViewRenderer 处理的正常行为

    您可以在控制器中这样做,然后执行您的视图实例化业务。

    $this->_helper->removeHelper('viewRenderer'); // stop the default views rendering process
    

    干杯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      • 2012-09-07
      • 1970-01-01
      相关资源
      最近更新 更多