如何使这个简单的ZF2视图解析器工作

时间:2014-02-24 11:07:06

标签: php zend-framework2

这是我的代码:

$renderer = new \Zend\View\Renderer\PhpRenderer();
$resolver = new \Zend\View\Resolver\TemplatePathStack(array(
    'script_paths' => array(
        '/module/B2bCore/view/b2b-core/std-email')));
$renderer->setResolver($resolver);

$view = new \Zend\View\Model\ViewModel();
$view->setTemplate("{$this->template}.phtml")->setTerminal(true);
$content = $renderer->render($view);

这会引发错误。例如,当$ this->模板的值为org/invite.phtml时,我得到以下内容:

Zend\View\Renderer\PhpRenderer::render: Unable to render template "org/invite.phtml"; resolver could not resolve to a file

我的文件路径和名称如下:

/module/B2bCore/view/b2b-core/std-email/org/invite.phtml

我看到手册中的示例使用__DIR__魔术常量指定脚本路径。我宁愿远离这个并引用应用程序根目录(根据示例模块index.php文件设置)的所有内容。我认为上面的配置符合这一点,但它仍然不起作用。

1 个答案:

答案 0 :(得分:2)

您不应该在ZF2模块中编写与应用程序相关的路径。

在您的示例中,"/module..."被识别为绝对路径(以/开头),而realpath()显然会将其缩小为false,这就是您看到的原因一条异常消息,告诉您有关"org/invite.phtml"的信息。

由于您的包/模块包含要呈现的视图,因此您应始终使用__DIR__来引用它们,因为您不知道应用程序的路径是什么(来自"供应商"透视)。

您的视图解析器可能应该使用以下内容进行实例化(调整路径):

$resolver = new \Zend\View\Resolver\TemplatePathStack([
    'script_paths' => [
        __DIR__ . '/../../view/b2b-core/std-email'
    ]
]);