Zend Framework - 视图层
-
简述
视图层是 MVC 应用程序的表示层。它将应用程序逻辑与表示逻辑分开。在典型的 PHP Web 应用程序中,所有业务逻辑和设计都是混合在一起的。混合可以在小型项目中更快地进行开发。但是,它在涉及大量高级架构的大型项目中失败得很惨。要更改 Web 应用程序的设计,开发人员还需要处理业务逻辑。这可能是灾难性的,导致业务逻辑的破坏。Zend Framework 提供了一个深思熟虑,干净,灵活和可扩展的视图层。视图层可作为单独的模块,Zend/View与Zend/Mvc模块集成。Zend视图层被分成多个组件,彼此之间可以很好地交互。其各个组件如下 :-
变量容器 − 保存视图层的数据。
-
视图模型 − 保存可变容器和设计模板。
-
渲染器 − 处理视图模型中的数据和模板并输出设计表示形式,可能是最终的 html 输出。
-
解析器 − 以渲染器可以使用的方式解析视图模型中可用的模板。
-
视图 (Zend\View\View) − 将请求映射到渲染器,然后映射到响应。
-
渲染策略 − 视图用于将请求映射到渲染器。
-
响应策略 − 视图用于将渲染器映射到响应。
视图层 View 处理 ViewModel,使用解析器解析模板,使用渲染策略渲染模板,最后使用响应渲染器输出模板。 -
-
视图层配置
与控制器一样,视图层可以在模块的配置文件中进行配置,称为 – module.config.php。主要配置是指定要放置模板的位置。这可以通过在“module.config.php”中添加以下配置来实现。默认情况下,视图层的所有组件都具有默认行为。例如,ViewModel 通过“小写模块名称/小写控制器名称/小写操作名称”规则在模板根目录中解析控制器操作的模板名称。但是,这可以被视图模型的 setTemplate() 方法覆盖。 -
控制器和视图层
默认情况下,控制器不需要向视图层发送任何数据。将模板编写在适当的位置就足够了。例如,在我们的示例TutorialController中,模板需要放置在 myapp/module/Tutorial/view/tutorial/tutorial/index.phtml。index.phtml 引用基于 PHP 的模板,它将由 PHP 渲染器呈现。还有其他渲染器,例如用于 json 输出的 JsonRenderer 和用于 rss 和atom输出的FeedRenderer。完整列表如下 −Zend 应用程序模板
最后,我们已经成功完成了Tutorial模块,我们可以使用url访问它 - http://localhost:8080/tutorial。 -
将数据传递到视图图层
将数据发送到视图层的最简单方法是使用ViewModel参数。更改后的indexAction方法如下 −现在,更改index.phtml 文件,如下所示 − -
视图助手
视图帮助程序用于编写要在模板中使用的小型原子函数。Zend Framework 提供了一个接口,Zend\View\Helper\HelperInterface 来编写标准视图帮助程序。帮助接口只有两种方法,-
setView() − 此方法接受 Zend\View\Renderer\RendererInterface 实例实现。
-
getView() − 它用于检索该实例。
HelperInterface的完整代码列表如下 −要在视图脚本中使用帮助程序,请使用$this>helperName()) 访问它。 -
-
内置助手
Zend Framework 为各种目的提供了许多内置的帮助程序函数。zend-mvc 中可用的一些视图帮助程序如下所示 −URL
URL 帮助程序用于生成与应用程序中定义的路由匹配的 URL。URL 帮助程序的定义是 −例如,在tutorial模块中,路由被命名为 tutorial,它有两个参数 action 和 id。我们可以使用URL帮助程序生成两个不同的URL,如下所示 -结果将如下所示 −Placeholder
Placeholder 帮助程序用于在视图脚本和视图实例之间保留内容。它提供了最初设置数据,然后在后续阶段使用它的选项。例如,我们可以设置,输出companyname,然后在所有其他地方使用它。Placeholder 提供了一些高级选项,用于从 PHP 数组和对象生成复杂内容。它还可以选择捕获模板本身的某些部分。例如,下面的代码捕获介于 两者之间的模板结果,并将其存储在 productlist Placeholder 中。类 – Product控制器模板结果Doctype
Doctype 帮助程序用于生成各种 html 文档类型。它是Placeholder 帮助程序的具体实现。可以在引导程序文件和配置文件中设置文档类型。基本用法如下图所示 −应用程序引导程序文件模块配置模板HeadTitle
HeadTitle 帮助程序用于生成 html 标题元素。它是Placeholder 帮助程序的具体实现。Zend提供了一个在模块配置文件中设置标题的选项,并且可以在任何级别(如站点,模块,控制器,操作等)进行设置。标题的部分代码如下 −模块模板结果HeadMeta
HeadMeta 助手用于生成 html meta 标记。它是Placeholder 帮助程序的具体实现。模板 −结果HeadLink
HeadLink 帮助程序用于生成 html 链接以包含外部资源。它是Placeholder 帮助程序的具体实现。模板结果HeadStyle
HeadStyle 帮助程序用于生成内联 CSS 样式。它是Placeholder 帮助程序的具体实现。模板HeadScript
HeadScript 用于生成内联脚本或包含外部脚本。它是Placeholder 帮助程序的具体实现。模板InlineScript
InlineScript 用于在 html 模板的头部和正文部分中生成脚本。它派生自 HeadScript。HTMLList
HTML 列表用于生成有序列表和无序列表。HTML列表的定义如下 -定义模板结果Cycle
Cycle 用于在循环环境中生成备选项。它具有赋值,下一个和上一个功能。控制器模板结果其他一些重要的内置助手如下 :-
BasePath − 基本路径用于生成应用程序根目录的公用文件夹的路径。
-
Partial − 部分用于在自己的变量范围内呈现特定模板。
-
PartialLoop − 部分循环类似于部分,但在循环环境中使用。
-
Identity − 身份用于从身份验证服务中检索登录用户的身份。
-
JSON − JSON 在安静环境中使用,其中输出采用 JSON 格式。它会发出正确的 HTTP 标头并禁用布局概念。
Zend Framework 中仍然有很多助手可用,例如i18n助手,form 助手,pagination 助手,navigation 助手等。 -
-
创建视图帮助程序
Zend 框架提供了一个内置的AbstractHelper用于实现HelperInterface来编写视图帮助程序。编写新助手所涉及的步骤如下 :-
步骤 1 − 继承类 Zend\View\Helper\AbstractHelper。
-
步骤 2 − 覆盖 __invoke() 函数。
-
步骤 3 − 在module.config.php文件中设置配置。
-
步骤 4 − 在视图脚本中使用视图帮助程序。
现在让我们创建一个TestHelper在 myapp/module/Tutorial/src/View下创建帮助程序文件夹。在Helper目录的TestHelper.php中编写TestHelper。完整列表如下 −在module.config.php中设置配置。在about视图脚本中使用新创建的TestHelper。 -