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 - 使用查询构建器如何指向存储库中的自定义方法