使用Zend Framework在更高的脚本路径中呈现视图

时间:2010-02-11 08:32:00

标签: zend-framework zend-view

让我们假设控制器中有以下代码:

$this->view->addScriptPath('dir1/views/scripts');
$this->view->addScriptPath('dir2/views/scripts');
$this->render('index.phtml');

其中dir1 / views / scripts包含2个文件:

-index.phtml  
-table.phtml

和dir2 / views / scripts:

-table.phtml

现在,它将在dir1中呈现index.phtml,因为目录2没有index.phtml。

Index.phtml看起来像:

<somehtml>
       <?= $this->render('table.phtml') ?>
</somehtml>

这就是我开始迷茫的地方。我希望它能够将最后一个目录中的table.phtml添加到脚本路径堆栈中,但它不会 我的问题有简单的解决方案/解释吗?

3 个答案:

答案 0 :(得分:1)

似乎路径以LIFO顺序使用。

查看viewRedndererview源文件,看看它是如何工作的。

答案 1 :(得分:0)

你可以用

> $this->view->setBasePath("../application/dir1/views");

更具体

答案 2 :(得分:0)

我最终扩展了Zend_View并添加了renderParent函数:

class My_View extends Zend_View
{
    private $_file = null;

    private $_name = null;

    /**
     * Finds a view script from the available directories.
     *
     * @param $name string The base name of the script.
     * @return void
     */
    protected function _script($name)
    {
        $this->_file = parent::_script($name);
        $this->_name = $name;

        return $this->_file;
    }

    /**
     * Renders the parent script by looping through all the script paths.
     *
     * @return void
     */
    public function renderParent()
    {
        $scriptPaths = $this->getScriptPaths();

        $found = false;
        for ($i = 0; $i < count($scriptPaths); $i++) {
            if ($this->_file == $scriptPaths[$i] . $this->_name) {
                $found = true;
            } elseif ($found) {
                if (is_readable($scriptPaths[$i] . $this->_name)) {
                    return $this->_run($scriptPaths[$i] . $this->_name);
                }
            }
        }
    }
}