多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > ZendFramework > Zend Framework教程-Zend_View

Zend Framework教程-Zend_View

來源:程序員人生   發布時間:2014-02-23 01:04:22 閱讀次數:4545次

    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.php6 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類

<?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設置視圖文件的目錄。

例如

$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

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


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美一区二区三区视频在线观看 | 亚洲国产欧美在线不卡中文 | 国产不卡高清在线观看视频 | 一级a毛片免费观看久久精品 | 成人在线观看一区 | 亚洲一区二区三区视频 | 精品二区 | 国产精品国产三级国产普通话对白 | 国产成人精品日本亚洲专区6 | 亚洲精品成人久久久影院 | 久久福利片 | 亚洲色图另类小说 | 国产精品久久久久久久久久一区 | 欧美成人免费全部观看天天性色 | 亚洲免费观看在线视频 | 成人免费视频在 | 欧美在线观看视频一区 | 国产美女无遮挡免费视频 | 欧美伊人网 | 欧美精品v国产精品v | 日本免费一区二区三区视频 | 国产全部视频 | 久久99精品久久久久久黑人 | 国产午夜不卡在线观看视频666 | 在线成人免费观看国产精品 | 亚洲精品综合一区二区三区在线 | 在线中文字幕播放 | 中文字幕资源在线 | 精品国产亚洲一区二区三区 | 伊人久久网站 | 欧美成人hd | 国产一区二区在线不卡 | 手机福利视频 | 国产精品1区 2区 3区 | 久久精品成人 | 日韩欧美国内 | 天天视频国产免费入口 | 欧美三级大片在线观看 | 亚洲图片在线欧美专区图片 | 亚洲天堂在线播放 | 日韩毛片欧美一级a |