本文实例讲述了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程序设计有所帮助。
原文链接:https://www.f2er.com/php/20280.html