`
lovefly_zero
  • 浏览: 390119 次
  • 性别: Icon_minigender_1
  • 来自: 株洲
社区版块
存档分类
最新评论

走进Zend Framework框架编程(六):视图(第一部分)

    博客分类:
  • PHP
阅读更多
本部分内容包括:视图,模板,视图帮助类等。

6.0视图介绍
在Zendframework的MVC编程模型中,视图(View)是在控制器的控制和指挥下,用来对程序逻辑进行呈现(Render)的。呈现的结果,就是我们在浏览器里看到的文字、图片、表单等各种网页元素及其字体、颜色、样式等各种效果。
Zend_View Class就是负责视图工作的类,它有效地完成了视图与程序逻辑的分离。它提供了视图帮助、输出过滤和变量转义等功能。
Zend_View还是一个模板系统,我们可以用PHP作为我们的模板语言。当然ZF还可以在View脚本里使用其他第三方的模板系统,比如PHPLib和Smarty等。
使用Zend_View时主要分两步,首先声明一个Zend_View实例,把变量等赋给它,然后使用控制脚本,根据视图脚本呈现出结果。
例如:
控制脚本(在控制器文件的action里,例如IndexController.php中的函数dispdataAction()):
……
Function dispdataAction()
{
……
$data = 'to view'; //数据变量
Zend_Loader::loadClass('Zend_View');
$view = new Zend_View(); //实例化
$view->books = $data;  //赋值
echo $view->render('view.php');
}
视图脚本转义输出语句(在视图脚本文件里,本例是view.php):
<?
php echo $this->escape($this->data
?>

6.1引导文件中setParam('noViewRenderer', <bool>)语句的再解释
Index文件中$fc->setParam('noViewRenderer', <bool>);语句和视图的某性特性有很大关系,比如视图存放的路径等一些默认属性都受该开关属性的影响。
false 是noViewRenderer的默认值。也就是说,如果没有该语句,则认为noViewRenderer参数被设置为false。
noViewRenderer参数被设置为false:意味着控制器使用ZF默认的视图特性,比如视图文件默认必须存放于views\script\<action>\文件夹下,视图文件必须存在,而且其名字必须为<action>.phtml。.phtml是ZF使用的PHP脚本文件,和普通PHP文件没有本质区别。同时,视图对象默认被实例化为$view变量,在控制脚本中使用$view的形式为:$this->view->…。
noViewRenderer参数被设置为true:意味着控制器不使用ZF默认的视图特性,而是通过显式的实例化Zend_view对象,通过我们自己的代码来设置视图对象的属性和方法。本部分“视图介绍”中就是显式声明和使用视图对象的例子。为了程序的灵活性和可控行,我们自然建议把noViewRenderer 设置为 true,这也是比较通常的做法。

6.2视图对象的Options
视图对象的Options选项进一步规定了视图脚本呈现过程中的一些细节。这些选项可以通过在声明视图对象时指定,在构造函数里设置,也可以通过set……()方法来指定。
—basePath基本路径
设置方法:setBasePath(), addBasePath()
例如目录结构:
base/path/
      helpers/
      filters/
      scripts/
     用$view->setBasePath(”base/ path/”);语句设置基本路径后,在没有$view->setScriptPath('……');语句直接指定脚本路径时,就会自动在base/path/scripts/下搜索视图脚本文件,如果使用了视图助手和过滤器,就会分别自动在helpers/和 filters/文件夹下搜索。
—encoding字符编码
用来在使用htmlentities()、htmlspecialchars()或其他操作时,指定字符编码。
设置方法:setEncoding()
默认编码是ISO-8859-1 (latin1)。
—escape回调函数
用于在视图呈现时调用该函数。后边有示例。
设置方法:setEscape()
—filter过滤器
用于在视图呈现后调用过滤方法。
设置方法:setFilter(), addFilter(),
—strictVars
当视图视图发送一个未初始化的变量时,用该选项指定ZF收购给出一个提示或警告信息:
Notice: Key "xxx" does not exist ……
设置方法:strictVars(true)

6.3视图对象的一些属性存取方法
—getVars() 得到所有赋予的变量
—clearVars()清除所有赋予的变量
—getScriptPath($script) 得到给定脚本的路径
—getScriptPaths()得到所有脚本的路径
—getHelperPath($helper)得到某个指定助手类的路径
—getHelperPaths()得到所有助手的路径
—getFilterPath($filter) 得到某个指定过滤器类的路径
—getFilterPaths()得到所有过滤器的路径

6.4视图的路径:

6.4.1视图脚本的搜寻路径
如果引导文件中$fc->setParam('noViewRenderer', false);
则默认指定视图文件views/scripts/[controller_name]/[action].phtml
在实际的程序代码中,为了获得可定制的灵活性,都在控制器中实际指定了视图文件的路径:
指定路径例句:$view->setScriptPath('…/views');或
$view->addScriptPath('…/views');
这个时候,引导文件必须有$fc->setParam('noViewRenderer', true);语句,即设置noViewRenderer为true。
6.4.2视图脚本的搜寻的优先顺序
$view = new Zend_View();
$view->addtScriptPath('…/views1');
$view->addScriptPath('…/views2');
$view->addScriptPath('…/views3');
Zend的手册是这样说的:“如果没有指定任何搜素路径,则在控制器文件下搜索视图文件。”但是通过实际环境测试,发现这时会报告错误:
“no view script directory set; unable to determine location for view script”
看起来最少需要指定一个搜索路径。
如果指定了多条搜素路径,则最后的搜索路径优先。也就是说,如果所有的搜索路径下有相同的视图文件,则最后路径下的起作用,它覆盖了前边路径下的视图文件。

6.5视图控制脚本及其变量传递
ZF的控制器是实例化和设置Zend_View的地方。在这里,我们给视图赋值并告诉它用指定的视图脚本去呈现它们。
6.5.1给视图对象赋值
示例:
$view->Variable=”……”;的形式
    function assign1Action()
    {
      $view = new Zend_View();
      $view->setScriptPath('views');
      $view->strictVars(true);
      $view->a = "Hay";
      $view->b = "Bee";
      $view->c = "Sea";
      $view->d;
      echo $view->render('tp_abc.php');
   }
示例:
$view-> assign(' Variable ', "……");的形式
    function assign2Action()
    {
      $view = new Zend_View();
      $view->setScriptPath('views');
      $view->assign('a', "Hay");
      $view->assign('b', "Bee");
      $view->assign('c', "Sea");
      echo $view->render('tp_abc.php');
   }
示例:数组
   function assign3Action()
    {
      $view = new Zend_View();
      $view->setScriptPath('views');
      $array = array(
        'a' => "Hay",
        'b' => "Bee",
        'c' => "Sea",
      );
      $view->assign($array);
      echo $view->render('tp_abc.php');
   }
示例:对象
    function assign4Action()
    {
      $view = new Zend_View();
      $view->setScriptPath('views');
      $obj = new StdClass;
      $obj->a = "Hay";
      $obj->b = "Bee";
      $obj->c = "Sea";
      $view->assign((array) $obj);
      echo $view->render('tp_abc.php');
   }
示例:
    使用回调函数。
    function myhtmlentityAction()
    {
      $view = new Zend_View();
      $view->setScriptPath('views');
//自定义类,在/models文件夹下的myclass.php文件中定义
      $mycls = new myClass();
//调用$mycls类的myHtmlEntity方法
      $view->setEscape(array($mycls, 'myHtmlEntity'));
      $obj = new StdClass;
      $obj->a = "the words hay bee sea ";
      $obj->b = "this is bee";
      $obj->c = " this is sea";
      $view->assign((array) $obj);
      echo $view->render('tp_abc.php');
   }
tp_abc.php视图脚本模板文件内容:
<?php
  echo 'a = ' . $this->escape($this->a).'<br>';
  echo 'b = ' . $this->escape($this->b).'<br>';
  echo 'c = ' . $this->escape($this->c).'<br>';   
?>
myclass.php文件内容:
<?php
  class myClass
  {
    public function __construct($options = null)
    {
    }
    function myHtmlEntity($val)
    {//把所有单词首字母变为大写
      return ucwords($val);
    }
  }
?>
输出结果:
a = The Words Hay Bee Sea
b = This Is Bee
c = This Is Sea
张庆(网眼)文章出处phpchina
分享到:
评论

相关推荐

    zendframework3.0框架

    Zend Framework 3.0(简称ZF3)是一个基于PHP编程语言的开源Web应用程序框架,它遵循模型-视图-控制器(MVC)架构模式,并提供了丰富的工具和组件来帮助开发者构建高质量的Web应用。这个框架的核心理念是模块化、可...

    Zend_Framework_ZH中文手册

    在Zend Framework中,MVC是一种关键的设计模式,用于分离应用程序的不同部分。模型(Model)处理业务逻辑,视图(View)负责数据展示,控制器(Controller)协调模型和视图的交互。手册将深入讲解如何设置和使用这些...

    Zend框架入门教程

    - **标题**:“Zend框架入门教程”明确指出这是一份针对初学者的指南,旨在帮助用户快速掌握Zend框架的基本使用方法。 - **描述**:这份PDF格式的教程主要面向希望了解和学习Zend框架的开发者,内容基础且实用。 ##...

    Zend Framework 1.8中文版参考手册.pdf

    1. **入门指南**:介绍如何安装Zend Framework,设置开发环境,以及创建第一个项目。 2. **组件详解**:详细阐述每个组件的功能、用法和示例,如控制器、视图助手、模型、数据库访问等。 3. **最佳实践**:提供了...

    zendframework留言分页

    - Zend Framework是一个MVC(模型-视图-控制器)架构的PHP框架,它遵循面向对象编程原则,提供了一系列独立且可重用的组件,如路由、控制器、视图助手等。 - 在本项目中,`index.php`是入口文件,负责初始化Zend ...

    zend完整框架Demo

    Zend框架是PHP编程中的一款强大、可扩展且企业级的应用程序开发框架,它基于MVC(Model-View-Controller)架构模式,旨在提高开发效率、代码质量和可维护性。本Demo是针对PHP5.3版本设计的,展示了Zend框架的核心...

    zend framework初级教程源代码

    1. **组件化架构**:Zend Framework 由一系列独立的、可重用的组件组成,如路由、控制器、视图、数据库访问等。每个组件都可以单独使用,或者与其他组件组合,以满足不同项目的需求。 2. **MVC模式**:Model-View-...

    最新zend framework 文档

    1. **安装与设置**:如何在你的开发环境中安装Zend Framework,包括配置PHP环境、设置自动加载器和创建第一个项目。 2. **MVC结构**:解释模型、视图和控制器各自的职责,以及如何组织代码以遵循这种架构。 3. **...

    zend+framework技术大全前十章

    在第一章,我们将介绍 Zend Framework 的设计理念,包括MVC(模型-视图-控制器)模式、依赖注入、面向对象编程等原则。此外,还会讨论 Zend Framework 如何与其他PHP库和框架集成,以及如何利用其强大的组件化设计来...

    大道PHP:LAMP+Zend+开源框架整合开发与实战(随书光盘源码2).rar

    3. Zend框架:Zend Framework是一款企业级的PHP框架,强调组件式设计,提供了一套强大的工具和服务,用于构建可扩展和高性能的Web应用。理解Zend框架的MVC(Model-View-Controller)模式,以及其服务、控制器、模型...

    Zend Framework 手册中文CHM版--11月4日更新

    尽管 Zend Framework 默认不绑定任何特定模板引擎,但可以轻松集成如 `Twig` 或 `Phly.Mustache` 等第三方模板库,实现灵活的视图渲染。 **9. 服务导向架构(SOA)** Zend Framework 支持 SOA 架构,可以与 `ZF2 ...

    (zf2)zend framework 2官方文档pdf

    ##### 14.3 第一个控制器测试 - 创建测试类。 - 编写测试用例。 ##### 14.4 失败的测试用例 - 通过编写失败的测试用例来验证测试的有效性。 ##### 14.5 配置测试的服务管理器 - 修改测试中的服务管理器配置。 -...

    网上商城系统(Zend扩展)

    首先,Zend 扩展是 Zend Framework 的一部分,它提供了一系列强大的工具和服务,用于构建高质量、高性能的 PHP 应用。Zend Framework 是一个开源、全组件的 PHP 框架,遵循 Model-View-Controller (MVC) 设计模式,...

    zend 中文手册 php高手 phper

    4. **ZF2 和 ZF3 版本**:Zend Framework 发展至今,经历了 ZF1、ZF2 和 ZF3 三个主要版本,每个版本都引入了新的特性和改进,如 ZF2 引入了命名空间和 PSR 标准,ZF3 更加强调组件的独立性。 5. **强大的数据库...

    PHP框架应用开发:THINKPHPPPT课件.ppt

    2. 了解THINKPHP框架的基本概念和使用流程,例如创建第一个"Hello World"应用,以及如何设置URL路径和控制器的关系。 3. 掌握THINKPHP中的模板替换和系统常量的使用,如何在模板中动态地插入数据和使用预定义的常量...

    phpGuidetoProgrammingwithZendFramework.rar

    8. **服务和API**:了解如何利用Zend Framework构建RESTful API,以及如何集成第三方服务,如支付网关或社交媒体API。 9. **安全性与性能优化**:书中会讨论如何确保应用的安全性,包括输入验证、防止SQL注入、XSS...

    基于ZendFramework2的PHP电子商务系统.zip

    【标题】"基于Zend Framework 2的PHP电子商务系统"是一个使用PHP编程语言和 Zend Framework 2 框架开发的Web应用程序,专为电子商务场景设计。这个系统包含了完整的前后端功能,可以支持在线购物、订单处理、用户...

Global site tag (gtag.js) - Google Analytics