微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Zend Framework教程之视图组件Zend_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类中,

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 * /.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类

_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设置视图文件的目录。

例如

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的常用方法

例如

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

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

* basePath/ * scripts/ * helpers/ * filters/ * * * @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,and filter paths relative to it * * Assumes a directory structure of: * * basePath/ * scripts/ * helpers/ * filters/ * * * @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传递参数到视图脚本。

例如

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

或者也可以用

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

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

获取传递过来的值

roles

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

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

视图常见用法举例

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

bootstrap('View'); $view = $boot->getResource('View'); $view->setHelperPath('Sql/View/Helper','Sql_View_Helper'); }

action中

view->assign('data',$data); }

视图文件

list.phtml

data as $item) : ?> item1);?>

更多关于zend相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》及《

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐