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

2025-05-29 0 46

本文实例讲述了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类中,

?

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程序设计有所帮助。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Zend Framework教程之视图组件Zend_View用法详解 https://www.kuaiidc.com/99751.html

相关文章

发表评论
暂无评论