本文实例讲述了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_Controller_Action类中,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
/**
* 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类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
<?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' ) ? 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?
*
* @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设置视图文件的目录。
例如
1
2
3
4
5
|
$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的常用方法
1
|
public function __construct( $config = array ())
|
构造函数参数
例如
1
2
3
4
|
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()初始化函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
/**
* 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传递参数到视图脚本。
例如
1
2
3
|
$this ->view->assign( 'roles' , $roles );
$this ->view->assign( 'num' , $num );
$this ->view->assign( 'a' , $a );
|
或者也可以用
1
2
3
4
5
6
|
$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
|
视图脚本文件中的常见用法:
获取传递过来的值
1
|
$this ->roles
|
使用一些常见的助手方法:
1
2
3
4
|
$this ->baseUrl();
$this ->url();
$this ->paginationControl();
$this ->partial()
|
视图常见用法举例
在bootstrap初始化view或者controller的init文件中
1
2
3
4
5
6
7
8
9
|
/**
* 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中
1
2
3
4
5
6
7
8
|
/**
*
* @return void
*/
public function listAction()
{
$this ->view->assign( 'data' , $data );
}
|
视图文件
list.phtml
1
2
3
4
5
|
<?php foreach ( $this ->data as $item ) : ?>
<tr style= "height: 19px;" >
<td class = "datagrid-cell" ><?php echo ( $item ->item1);?></td>
</tr>
<?php endforeach ; ?>
|
希望本文所述对大家PHP程序设计有所帮助。
相关文章
- 个人网站搭建:如何挑选具有弹性扩展能力的服务器? 2025-06-10
- 个人服务器网站搭建:如何选择适合自己的建站程序或框架? 2025-06-10
- 64M VPS建站:能否支持高流量网站运行? 2025-06-10
- 64M VPS建站:怎样选择合适的域名和SSL证书? 2025-06-10
- 64M VPS建站:怎样优化以提高网站加载速度? 2025-06-10
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
-
2025-06-04 37
-
2025-05-25 52
-
2025-05-25 56
-
2025-06-04 81
-
2025-05-29 36