Php 在standalone\Zend\View中使用布局setRoot() 我需要什么
我需要一个小型站点的模板引擎,我决定尝试使用Php 在standalone\Zend\View中使用布局setRoot() 我需要什么,php,zend-framework,model-view-controller,zend-framework2,zend-view,Php,Zend Framework,Model View Controller,Zend Framework2,Zend View,我需要一个小型站点的模板引擎,我决定尝试使用\Zend\View。但我并没有使用Zend框架本身 因此,基本上我希望在Zend之外的自定义脚本中进行一些数据处理,然后将变量传递到\Zend\View中,并使其呈现我的模板 我试过的 我指的是以下手册:。基本实现(其中我仅使用\Zend\View\Renderer\PhpRenderer和\Zend\View\Model\ViewModel)按预期工作。但是,当我尝试更复杂的东西时,例如使用公共布局时,我会遇到错误 如果我做对了,可以嵌套\Zend
\Zend\View
。但我并没有使用Zend框架本身
因此,基本上我希望在Zend之外的自定义脚本中进行一些数据处理,然后将变量传递到\Zend\View
中,并使其呈现我的模板
我试过的
我指的是以下手册:。基本实现(其中我仅使用\Zend\View\Renderer\PhpRenderer
和\Zend\View\Model\ViewModel
)按预期工作。但是,当我尝试更复杂的东西时,例如使用公共布局时,我会遇到错误
如果我做对了,可以嵌套\Zend\View\Model\ViewModel
s,并且我可以使用预定义的占位符()调用子占位符。但是应该有一个主要的ViewModel
作为根(),它将包含带有Doctype的框架HTML页面,以及我传递给headTitle()
,headMeta()
等的内容
我试图创建一个viewModel,使用setTemplate()
将它指向我的根布局,然后将它传递给setRoot()
函数,但它不起作用。我尝试在代码中搜索该函数,并在/Zend/View/Helper/ViewModel.php中找到了它。它采用Zend\View\Model\ModelInterface
的实例,而不是\Zend\View\Model\ViewModel
的实例。但是,当我尝试创建一个新的ModelInterface并为其设置模板时,它会让我感到困惑
致命错误:无法实例化接口Zend\View\Model\ModelInterface
它变得过于复杂,我无法理解
代码如下:
我得到的是:
致命错误:未捕获异常“Zend\View\exception\RuntimeException”
带有消息“Zend\View\Helper\Layout::getRoot:无视图模型”
当前在渲染器中注册为root用户
Zend/View/Helper/Layout.php:64堆栈跟踪:
0 Zend/View/Helper/Layout.php(37):Zend\View\Helper\Layout->getRoot()
1[内部函数]:Zend\View\Helper\Layout->\uuu invoke()
2 Zend/View/Renderer/PhpRenderer.php(399):调用用户函数数组(对象(Zend\View\Helper\Layout),数组)
3视图/layout.phtml(16):Zend\View\Renderer\PhpRenderer->\uu调用('layout',Array)
phtml(16):Zend\View\Renderer\PhpRenderer->layout()
5 Zend/View/Renderer/PhpRenderer.php(506):包括(“…”)
6 zendviewtest.php(32):Zend\View\Renderer\PhpRenderer->render(对象(Zend\View\Model\ViewModel))
在第64行的Zend/View/Helper/Layout.php中抛出7{main}
我相信这是因为$this->layout()
引用。当我拆下那个部件时,它开始正常工作
但是我认为$this->layout()
是必要的,因为这是传递页面内容的自然方式。如果我删除它并使用普通的setVariable('content',…)
它将打破Zend惯例,对吗
我还想使用一些嵌套布局,如页眉、页脚等,但我不知道如何实现。我试着按关键字和错误代码进行搜索,但找不到任何有用的东西。请告知
更新处理和显示页面内容的最佳方式是什么?由于我不能使用文档中建议的echo$this->layout()->内容
部分,我应该用什么替换它?layout()
返回您没有的布局视图模型。
要在另一个视图脚本中呈现其他视图脚本,请使用局部视图辅助程序
print $this->partial('path/to/other/view/script',array('param1'=>'param1'));
zend framework中的布局在视图管理器的配置中定义,并由控制器处理,因为您手动执行这些步骤,不需要布局。。。只需设置变量,如$viewModel->setVariable('param1','param1Value')
并在视图中使用它,如$this->param1
但是我认为$this->layout()是必要的,因为它是自然的
传递页面内容的方式。如果我把它取下来用普通的
setVariable('content',…)它将打破Zend惯例,对吗
你完全错了,我的应用程序完全基于zend mvc,我从未使用过$this->layout()
,正如我所说的$this->layout()
返回视图管理器从layout.phtml文件创建的布局视图模型,您当前拥有的视图脚本就是布局。setVariable('content',…)是您可以继续操作的唯一方法,没有其他方法可以继续操作…谢谢您回答我的问题。那么,处理页面内容的最佳方式是什么?由于我无法使用文档中建议的echo$this->layout()->content
部分,我应该用什么替换它?在何处以及如何设置视图的content
变量?
<?php
$this->headMeta()->appendHttpEquiv('Content-Type', 'text/html;charset=utf-8');
$this->headTitle()->setSeparator(' - ');
?>
<!DOCTYPE html>
<html>
<head>
<?php echo $this->headMeta(); ?>
<?php echo $this->headTitle(); ?>
<?php echo $this->headLink() . "\n" ?>
<?php echo $this->headscript(). "\n"?>
</head>
<body>
<div id="nav">
<?php echo $this->layout()->nav ?>
</div>
<div id="content">
<?php echo $this->layout()->content; ?>
</div>
</body>
</html>
print $this->partial('path/to/other/view/script',array('param1'=>'param1'));