目录
Zend Framework教程之视图组件Zend_View用法详解,zendzend_view
您可能感兴趣的文章:
首页 php教程 php手册 Zend Framework教程之视图组件Zend_View用法详解,zendzend_view

Zend Framework教程之视图组件Zend_View用法详解,zendzend_view

Jun 13, 2016 am 08:44 AM
framework smarty zend 视图

Zend Framework教程之视图组件Zend_View用法详解,zendzend_view

本文实例讲述了Zend Framework教程之视图组件Zend_View用法。分享给大家供大家参考,具体如下:

Zend_View是Zend Framework的视图组件,MVC中的视图层。 Zend_View也是应用的直接对用户展示的页面。这里介绍一下Zend_View的实现类,以及如何和Controller结合在一起的。

View的实现

Zend_View的实现主要是通过如下目录的类实现:

root@coder-671T-M:/library/Zend# tree | grep View.php
│   └── View/
├── View.php

root@coder-671T-M:/library/Zend/View# tree
.
├── Abstract.php
├── Exception.php
├── Helper
│   ├── Abstract.php
│   ├── Action.php
│   ├── BaseUrl.php
│   ├── Currency.php
│   ├── Cycle.php
│   ├── DeclareVars.php
│   ├── Doctype.php
│   ├── Fieldset.php
│   ├── FormButton.php
│   ├── FormCheckbox.php
│   ├── FormElement.php
│   ├── FormErrors.php
│   ├── FormFile.php
│   ├── FormHidden.php
│   ├── FormImage.php
│   ├── FormLabel.php
│   ├── FormMultiCheckbox.php
│   ├── FormNote.php
│   ├── FormPassword.php
│   ├── Form.php
│   ├── FormRadio.php
│   ├── FormReset.php
│   ├── FormSelect.php
│   ├── FormSubmit.php
│   ├── FormTextarea.php
│   ├── FormText.php
│   ├── Gravatar.php
│   ├── HeadLink.php
│   ├── HeadMeta.php
│   ├── HeadScript.php
│   ├── HeadStyle.php
│   ├── HeadTitle.php
│   ├── HtmlElement.php
│   ├── HtmlFlash.php
│   ├── HtmlList.php
│   ├── HtmlObject.php
│   ├── HtmlPage.php
│   ├── HtmlQuicktime.php
│   ├── InlineScript.php
│   ├── Interface.php
│   ├── Json.php
│   ├── Layout.php
│   ├── Navigation
│   │   ├── Breadcrumbs.php
│   │   ├── HelperAbstract.php
│   │   ├── Helper.php
│   │   ├── Links.php
│   │   ├── Menu.php
│   │   └── Sitemap.php
│   ├── Navigation.php
│   ├── PaginationControl.php
│   ├── Partial
│   │   └── Exception.php
│   ├── PartialLoop.php
│   ├── Partial.php
│   ├── Placeholder
│   │   ├── Container
│   │   │   ├── Abstract.php
│   │   │   ├── Exception.php
│   │   │   └── Standalone.php
│   │   ├── Container.php
│   │   ├── Registry
│   │   │   └── Exception.php
│   │   └── Registry.php
│   ├── Placeholder.php
│   ├── RenderToPlaceholder.php
│   ├── ServerUrl.php
│   ├── TinySrc.php
│   ├── Translate.php
│   ├── Url.php
│   └── UserAgent.php
├── Interface.php
└── Stream.php

6 directories, 70 files

Zend_View和Zend_Controller的整合

主要在Zend_Controller_Action类中,

/**
   * Initialize View object
   *
   * Initializes {@link $view} if not otherwise a Zend_View_Interface.
   *
   * If {@link $view} is not otherwise set, instantiates a new Zend_View
   * object, using the 'views' subdirectory at the same level as the
   * controller directory for the current module as the base directory.
   * It uses this to set the following:
   * - script path = views/scripts/
   * - helper path = views/helpers/
   * - filter path = views/filters/
   *
   * @return Zend_View_Interface
   * @throws Zend_Controller_Exception if base view directory does not exist
   */
  public function initView()
  {
    if (!$this->getInvokeArg('noViewRenderer') && $this->_helper->hasHelper('viewRenderer')) {
      return $this->view;
    }
    require_once 'Zend/View/Interface.php';
    if (isset($this->view) && ($this->view instanceof Zend_View_Interface)) {
      return $this->view;
    }
    $request = $this->getRequest();
    $module = $request->getModuleName();
    $dirs  = $this->getFrontController()->getControllerDirectory();
    if (empty($module) || !isset($dirs[$module])) {
      $module = $this->getFrontController()->getDispatcher()->getDefaultModule();
    }
    $baseDir = dirname($dirs[$module]) . DIRECTORY_SEPARATOR . 'views';
    if (!file_exists($baseDir) || !is_dir($baseDir)) {
      require_once 'Zend/Controller/Exception.php';
      throw new Zend_Controller_Exception('Missing base view directory ("' . $baseDir . '")');
    }
    require_once 'Zend/View.php';
    $this->view = new Zend_View(array('basePath' => $baseDir));
    return $this->view;
  }
  /**
   * Render a view
   *
   * Renders a view. By default, views are found in the view script path as
   * <controller>/<action>.phtml. You may change the script suffix by
   * resetting {@link $viewSuffix}. You may omit the controller directory
   * prefix by specifying boolean true for $noController.
   *
   * By default, the rendered contents are appended to the response. You may
   * specify the named body content segment to set by specifying a $name.
   *
   * @see Zend_Controller_Response_Abstract::appendBody()
   * @param string|null $action Defaults to action registered in request object
   * @param string|null $name Response object named path segment to use; defaults to null
   * @param bool $noController Defaults to false; i.e. use controller name as subdir in which to search for view script
   * @return void
   */
  public function render($action = null, $name = null, $noController = false)
  {
    if (!$this->getInvokeArg('noViewRenderer') && $this->_helper->hasHelper('viewRenderer')) {
      return $this->_helper->viewRenderer->render($action, $name, $noController);
    }
    $view  = $this->initView();
    $script = $this->getViewScript($action, $noController);
    $this->getResponse()->appendBody(
      $view->render($script),
      $name
    );
  }
  /**
   * Render a given view script
   *
   * Similar to {@link render()}, this method renders a view script. Unlike render(),
   * however, it does not autodetermine the view script via {@link getViewScript()},
   * but instead renders the script passed to it. Use this if you know the
   * exact view script name and path you wish to use, or if using paths that do not
   * conform to the spec defined with getViewScript().
   *
   * By default, the rendered contents are appended to the response. You may
   * specify the named body content segment to set by specifying a $name.
   *
   * @param string $script
   * @param string $name
   * @return void
   */
  public function renderScript($script, $name = null)
  {
    if (!$this->getInvokeArg('noViewRenderer') && $this->_helper->hasHelper('viewRenderer')) {
      return $this->_helper->viewRenderer->renderScript($script, $name);
    }
    $view = $this->initView();
    $this->getResponse()->appendBody(
      $view->render($script),
      $name
    );
  }

登录后复制

Zend_View.php类

<&#63;php
/**
 * Zend Framework
 *
 * LICENSE
 *
 * This source file is subject to the new BSD license that is bundled
 * with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://framework.zend.com/license/new-bsd
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@zend.com so we can send you a copy immediately.
 *
 * @category  Zend
 * @package  Zend_View
 * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
 * @license  http://framework.zend.com/license/new-bsd   New BSD License
 * @version  $Id: View.php 23775 2011-03-01 17:25:24Z ralph $
 */
/**
 * Abstract master class for extension.
 */
require_once 'Zend/View/Abstract.php';
/**
 * Concrete class for handling view scripts.
 *
 * @category  Zend
 * @package  Zend_View
 * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
 * @license  http://framework.zend.com/license/new-bsd   New BSD License
 */
class Zend_View extends Zend_View_Abstract
{
  /**
   * Whether or not to use streams to mimic short tags
   * @var bool
   */
  private $_useViewStream = false;
  /**
   * Whether or not to use stream wrapper if short_open_tag is false
   * @var bool
   */
  private $_useStreamWrapper = false;
  /**
   * Constructor
   *
   * Register Zend_View_Stream stream wrapper if short tags are disabled.
   *
   * @param array $config
   * @return void
   */
  public function __construct($config = array())
  {
    $this->_useViewStream = (bool) ini_get('short_open_tag') &#63; false : true;
    if ($this->_useViewStream) {
      if (!in_array('zend.view', stream_get_wrappers())) {
        require_once 'Zend/View/Stream.php';
        stream_wrapper_register('zend.view', 'Zend_View_Stream');
      }
    }
    if (array_key_exists('useStreamWrapper', $config)) {
      $this->setUseStreamWrapper($config['useStreamWrapper']);
    }
    parent::__construct($config);
  }
  /**
   * Set flag indicating if stream wrapper should be used if short_open_tag is off
   *
   * @param bool $flag
   * @return Zend_View
   */
  public function setUseStreamWrapper($flag)
  {
    $this->_useStreamWrapper = (bool) $flag;
    return $this;
  }
  /**
   * Should the stream wrapper be used if short_open_tag is off&#63;
   *
   * @return bool
   */
  public function useStreamWrapper()
  {
    return $this->_useStreamWrapper;
  }
  /**
   * Includes the view script in a scope with only public $this variables.
   *
   * @param string The view script to execute.
   */
  protected function _run()
  {
    if ($this->_useViewStream && $this->useStreamWrapper()) {
      include 'zend.view://' . func_get_arg(0);
    } else {
      include func_get_arg(0);
    }
  }
}

登录后复制

默认情况会自动通过Controller会通过render方法来实例化Zend_View, 然后rener到对应的视图文件中。当然可以自己实例化Zend_View,然后使用。

action默认指向的文件是和action的名称相同,如果要指定视图文件,可以通过$this->render的相关方法指定.也可以通过addScriptPath和setScriptPath设置视图文件的目录。

例如

$view = new Zend_View();
$view->addScriptPath('/www/app/myviews');
$view->addScriptPath('/www/app/viewscomm');
// 如果调用 $view->render('example.php'), Zend_View 将
// 首先查找 "/www/app/myviews/example.php", 找不到再找"/www/app/viewscomm/example.php", 如果还找不到,最后查找当前目录下/的"example.php".

登录后复制

Zend_View的常用方法

public function __construct($config = array())

登录后复制

构造函数参数

例如

array(
 'escape' => array(),
 'encoding' => array(),
);

登录后复制

常见key:

escape、encoding、basePath、basePathPrefix、scriptPath、helperPath、 helperPathPrefix、filterPath、filterPathPrefix、filter
public function getEngine() Return the template engine object

public function init()初始化函数

/**
* Given a base path, sets the script, helper, and filter paths relative to it
*
* Assumes a directory structure of:
* <code>
* basePath/
*   scripts/
*   helpers/
*   filters/
* </code>
*
* @param string $path
* @param string $prefix Prefix to use for helper and filter paths
* @return Zend_View_Abstract
*/
public function setBasePath($path, $classPrefix = 'Zend_View')
/**
* Given a base path, add script, helper, and filter paths relative to it
*
* Assumes a directory structure of:
* <code>
* basePath/
*   scripts/
*   helpers/
*   filters/
* </code>
*
* @param string $path
* @param string $prefix Prefix to use for helper and filter paths
* @return Zend_View_Abstract
*/
public function addBasePath($path, $classPrefix = 'Zend_View')
public function addScriptPath($path)Adds to the stack of view script paths in LIFO order.
public function setScriptPath($path) Resets the stack of view script paths.
public function getScriptPath($name)Return full path to a view script specified by $name
public function getScriptPaths()Returns an array of all currently set script paths
public function addHelperPath($path, $classPrefix = 'Zend_View_Helper_')Adds to the stack of helper paths in LIFO order.
public function setHelperPath($path, $classPrefix = 'Zend_View_Helper_')Resets the stack of helper paths.
public function getHelperPath($name) Get full path to a helper class file specified by $name
public function getHelperPaths()Returns an array of all currently set helper paths
public function getHelper($name) Get a helper by name
public function getHelpers()Get array of all active helpers
public function getAllPaths() Return associative array of path types => paths
public function setEscape($spec)
/**
* Assigns variables to the view script via differing strategies.
*
* Zend_View::assign('name', $value) assigns a variable called 'name'
* with the corresponding $value.
*
* Zend_View::assign($array) assigns the array keys as variable
* names (with the corresponding array values).
*
* @see  __set()
* @param string|array The assignment strategy to use.
* @param mixed (Optional) If assigning a named variable, use this
* as the value.
* @return Zend_View_Abstract Fluent interface
* @throws Zend_View_Exception if $spec is neither a string nor an array,
* or if an attempt to set a private or protected member is detected
*/
public function assign($spec, $value = null)

登录后复制

在controller的action可以通过assign传递参数到视图脚本。

例如

$this->view->assign('roles', $roles);
$this->view->assign('num', $num);
$this->view->assign('a', $a);

登录后复制

或者也可以用

$this->view->roles=$roles;
$this->view->a=$a;
public function render($name) Processes a view script and returns the output.
public function escape($var):Escapes a value for output in a view script.
public function setEncoding($encoding) Set encoding to use with htmlentities() and htmlspecialchars()
public function getEncoding() :Return current escape encoding

登录后复制

视图脚本文件中的常见用法

获取传递过来的值

$this->roles

登录后复制

使用一些常见的助手方法:

$this->baseUrl();
$this->url();
$this->paginationControl();
$this->partial()

登录后复制

视图常见用法举例

在bootstrap初始化view或者controller的init文件中

/**
 * Initialize the common view helper
 */
protected function _initViewHelper()
{
  $boot=$this->bootstrap('View');
  $view = $boot->getResource('View');
        $view->setHelperPath('Sql/View/Helper', 'Sql_View_Helper');
}
登录后复制

action中

/**
 *
 * @return void
 */
public function listAction()
{
  $this->view->assign('data', $data);
}

登录后复制

视图文件

list.phtml

<&#63;php foreach ($this->data as $item) : &#63;>
<tr style="height: 19px;">
    <td class="datagrid-cell"><&#63;php echo($item->item1);&#63;></td>
</tr>
<&#63;php endforeach; &#63;>

登录后复制

更多关于zend相关内容感兴趣的读者可查看本站专题:《Zend FrameWork框架入门教程》、《php优秀开发框架总结》、《Yii框架入门及常用技巧总结》、《ThinkPHP入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

您可能感兴趣的文章:

  • Zend Framework教程之Autoloading用法详解
  • Zend Framework教程之Resource Autoloading用法实例
  • Zend Framework教程之MVC框架的Controller用法分析
  • Zend Framework教程之路由功能Zend_Controller_Router详解
  • Zend Framework教程之Zend_Controller_Plugin插件用法详解
  • Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
  • Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
  • Zend Framework教程之动作的基类Zend_Controller_Action详解
  • Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
  • Zend Framework教程之前端控制器Zend_Controller_Front用法详解
  • Zend Framework教程之Loader以及PluginLoader用法详解
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Microsoft NET Framework 安装问题 错误代码 0x800c0006 修复 Microsoft NET Framework 安装问题 错误代码 0x800c0006 修复 May 05, 2023 pm 04:01 PM

.NETFramework4是开发人员和最终用户在Windows上运行最新版本的应用程序所必需的。但是,在下载安装.NETFramework4时,许多用户抱怨安装程序在中途停止,显示以下错误消息-“ .NETFramework4hasnotbeeninstalledbecauseDownloadfailedwitherrorcode0x800c0006 ”。在您的设备上安装.NETFramework4时,如果您也在体验它,那么您就来对了地方

如何在Vue中实现可编辑的表格 如何在Vue中实现可编辑的表格 Nov 08, 2023 pm 12:51 PM

在许多Web应用程序中,表格是必不可少的一个组件。表格通常具有大量数据,因此表格需要一些特定的功能来提高用户体验。其中一个重要的功能是可编辑性。在本文中,我们将探讨如何使用Vue.js实现可编辑的表格,并提供具体的代码示例。步骤1:准备数据首先,我们需要为表格准备数据。我们可以使用JSON对象来存储表格的数据,并将其存储在Vue实例的data属性中。在本例中

iOS 17 的待机模式将正在充电的 iPhone 变成家庭集线器 iOS 17 的待机模式将正在充电的 iPhone 变成家庭集线器 Jun 06, 2023 am 08:20 AM

iOS17中的Apple正在引入待机模式,这是一种新的显示体验,专为水平方向的充电iPhone而设计。处于这个位置的iPhone能够显示一系列全屏小部件,将其变成一个有用的家庭中心。待机模式会在水平放置在充电器上运行iOS17的iPhone上自动激活。您可以查看时间、天气、日历、音乐控制、照片等信息。您可以通过可用的待机选项向左或向右滑动,然后长按或向上/向下滑动以进行自定义。例如,随着时间的流逝,您可以从模拟视图、数字视图、气泡字体和日光视图中进行选择,其中背景颜色会根据时间而变化。有一些选项

如何在 Windows 11/10 上使用 SetupDiag 识别 Windows 升级问题 如何在 Windows 11/10 上使用 SetupDiag 识别 Windows 升级问题 Apr 17, 2023 am 10:07 AM

每当您的Windows11或Windows10PC出现升级或更新问题时,您通常会看到一个错误代码,指示故障背后的实际原因。但是,有时,升级或更新失败可能不会显示错误代码,这时就会出现混淆。有了方便的错误代码,您就可以确切地知道问题出在哪里,因此您可以尝试修复。但是由于没有出现错误代码,因此识别问题并解决它变得极具挑战性。这会占用您大量时间来简单地找出错误背后的原因。在这种情况下,您可以尝试使用Microsoft提供的名为SetupDiag的专用工具,该工具可帮助您轻松识别错误背后的真

SCNotification 已停止工作 [修复它的 5 个步骤] SCNotification 已停止工作 [修复它的 5 个步骤] May 17, 2023 pm 09:35 PM

作为Windows用户,您很可能会在每次启动计算机时遇到SCNotification已停止工作错误。SCNotification.exe是一个微软系统通知文件,由于权限错误和点网故障等原因,每次启动PC时都会崩溃。此错误也以其问题事件名称而闻名。因此,您可能不会将其视为SCNotification已停止工作,而是将其视为错误clr20r3。在本文中,我们将探讨您需要采取的所有步骤来修复SCNotification已停止工作,以免它再次困扰您。什么是SCNotification.e

理解SpringBoot和SpringMVC之间的差异及比较 理解SpringBoot和SpringMVC之间的差异及比较 Dec 29, 2023 am 09:20 AM

对比SpringBoot与SpringMVC,了解它们的差异随着Java开发的不断发展,Spring框架已经成为了许多开发人员和企业的首选。在Spring的生态系统中,SpringBoot和SpringMVC是两个非常重要的组件。虽然它们都是基于Spring框架的,但在功能和使用方式上却有一些区别。本文将重点对比一下SpringBoot与Sprin

php如何使用CodeIgniter4框架? php如何使用CodeIgniter4框架? May 31, 2023 pm 02:51 PM

PHP是一种非常流行的编程语言,而CodeIgniter4是一种常用的PHP框架。在开发Web应用程序时,使用框架是非常有帮助的,它可以加速开发过程、提高代码质量、降低维护成本。本文将介绍如何使用CodeIgniter4框架。安装CodeIgniter4框架CodeIgniter4框架可以从官方网站(https://codeigniter.com/)下载。下

Laravel开发:如何使用Laravel View生成视图? Laravel开发:如何使用Laravel View生成视图? Jun 14, 2023 pm 03:28 PM

Laravel是目前最流行的PHP框架之一,其强大的视图生成能力是让人印象深刻的一点。视图是Web应用程序中展示给用户的页面或视觉元素,其中包含HTML、CSS和JavaScript等代码。LaravelView允许开发者使用结构化的模板语言来构建网页,同时通过控制器和路由生成相应的视图。在本文中,我们将探讨如何使用LaravelView生成视图。一、什

See all articles