ZF2:我在哪里存储 partialLoop 模板文件?

Posted

技术标签:

【中文标题】ZF2:我在哪里存储 partialLoop 模板文件?【英文标题】:ZF2: where do I store partialLoop template files? 【发布时间】:2012-12-01 01:39:36 【问题描述】:

有人知道在哪里存储 ZF2 部分循环模板文件吗?

我将模板存储在标准 Zend 文件结构下的相关视图文件夹中。这在 ZF1 下工作。但是在尝试重构代码以使用 ZF2 时出现此错误?

Fatal error: Uncaught exception 'Zend\View\Exception\RuntimeException' with message
'Zend\View\Renderer\phpRenderer::render: Unable to render template
 "listingsPartial.phtml"; resolver could not resolve to a file' in C:\zendProject\zf2\vendor\zendframework\zendframework\library\Zend\View\Renderer\PhpRenderer.php:454 Stack trace: #0 C:\zendProject\zf2\vendor\zendframework\zendframework\library\Zend\View\Helper\Partial.php(73): 
Zend\View\Renderer\PhpRenderer->render('listingsPartial...') #1 C:\zendProject\zf2\vendor\zendframework\zendframework\library\Zend\View\Helper\PartialLoop.php(70): Zend\View\Helper\Partial->__invoke('listingsPartial...', Array) #2 [internal function]: Zend\View\Helper\PartialLoop->__invoke('listingsPartial...', Array) #3 C:\zendProject\zf2\vendor\zendframework\zendframework\library\Zend\View\Renderer\PhpRenderer.php(355): 
 call_user_func_array(Object(Zend\View\Helper\PartialLoop), Array) #4 C:\zendProject\zf2\module\Landlord\view\landlord\home\index.phtml(42): 
 Zend\View\Renderer\PhpRenderer->__call
('p in C:\zendProject\zf2\vendor\zendframework\zendframework\library\Zend\View\Renderer\PhpRenderer.php on line 454

我对部分循环的调用如下所示:

 echo $this->partialLoop('listingsPartial.phtml',$model);

调用它的模板和视图页面存储在同一个文件中。我想知道是否需要在某个地方(即模块或配置文件)列出 ListingsPartial 模板?

我的目录结构如下:

> zf2  
   -module   
         -moduleName    
            -view
>              -moduleName
>                 -controllerName
>                     - *the view file and partial template file are stored here-*

任何建议表示赞赏。

【问题讨论】:

试试partialLoop('Module\Controller\template.phtml', $model)。我认为如果没有完整的资格,模板将在 view-root 中查找 感谢 Sam - 没有从 ZF1 中获得更改。但是,部分循环似乎只拾取返回的数据库/数据集中的第一项。你知道为什么会这样吗? 用更多信息更新您的问题,预期输出是什么,当前输出是什么以及您具体做了什么? :> 对不起山姆 - 我明白了。这个问题现在是我的 SQL 语句返回的结果集的问题。您的回答很有帮助,因为文档没有注意到该函数现在在文件根目录中查找。确实想标记为答案,很高兴接受它作为解决方案。谢谢。 【参考方案1】:

作为提供完整限定路径的替代方法(这可能很麻烦),您可以执行以下两种操作之一:

1) 在module.config.php 文件中提供模板文件的路径,如下所示

'view_manager' => array(
    'template_path_stack' => array(
        'module' => __DIR__ . '/../view',
        'partial' => __DIR__ . '/../view/moduleName\controllerName'
    ),
)

2) 在view 目录下直接创建一个名为partial 的目录。将所有模板文件放在此目录中。

zf2  
  -module   
     -moduleName    
        -view
          -partial
             - partial template files
          -moduleName
             -controllerName
                 - view files

然后从您的视图脚本中调用您的部分循环,如下所示:

echo $this->partialLoop('partial/listingsPartial.phtml',$model);

我喜欢选项 2,因为它将所有部分文件组织到一个位置。

【讨论】:

【参考方案2】:

正如我的评论所猜测的那样,错误消息表明模板文件根本无法找到。

为了能够在partialLoop() 中加载模板文件,请始终使用基于视图文件夹的完全限定路径。所以正确的用法是这样的

$this->partialLoop('Modulename\Controllername\Templatefile.phtml', $model);

【讨论】:

非常感谢 Sam - 顺便说一句,我在尝试了解新 ZF2 时发现个人博客很有用。

以上是关于ZF2:我在哪里存储 partialLoop 模板文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在zf2 AbstractRestfulController中调用模板文件

ZF2 Doctrine - 使用查询构建器如何指向存储库中的自定义方法

ZF2:如何从其他模块渲染视图

ZF2 将 BjyAuthorize 与 Zend\Navigation 集成

ZF2维护页面

如何从 zf2 框架应用程序启动 REST 客户端