Heim  >  Artikel  >  Backend-Entwicklung  >  Die Ansichtskomponente Zend_View von Zend Framework

Die Ansichtskomponente Zend_View von Zend Framework

不言
不言Original
2018-05-04 16:17:421204Durchsuche

Dieser Artikel stellt hauptsächlich die Verwendung der Ansichtskomponente Zend_View im Zend Framework-Tutorial vor. Er analysiert das Prinzip der Ansichtskomponente Zend_View detaillierter und analysiert die Verwendungsfähigkeiten von Zend_View in Form von Beispielen dazu

Dieser Artikel veranschaulicht die Verwendung der Ansichtskomponente Zend_View im Zend Framework-Tutorial. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Zend_View ist die Ansichtskomponente von Zend Framework, die Ansichtsebene in MVC. Zend_View ist auch die Seite der Anwendung, die dem Benutzer direkt angezeigt wird. Hier stellen wir die Implementierungsklasse von Zend_View vor und wie man sie mit Controller kombiniert.

Implementierung von View

Die Implementierung von Zend_View wird hauptsächlich durch Klassen im folgenden Verzeichnis implementiert:

root@coder-671T-M:/ Bibliothek/ Zend# Baum |. grep View.php
│ └── View/
├── View.php

root@coder-671T-M:/library/Zend/View# Baum
.
├── 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
│ ├── fotimage.php
│ ├── Formlabel 🎜> │ ├── 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
│ │ ├── ─ Links.php│ │ └─ ─ Exception.php
│ ├── PartialLoop.php
│ ├── Partial.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 Verzeichnisse, 70 Dateien


Integration von Zend_View und Zend_Controller


Hauptsächlich in der Klasse 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(&#39;noViewRenderer&#39;) && $this->_helper->hasHelper(&#39;viewRenderer&#39;)) {
      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(&#39;noViewRenderer&#39;) && $this->_helper->hasHelper(&#39;viewRenderer&#39;)) {
      return $this->_helper->viewRenderer->renderScript($script, $name);
    }
    $view = $this->initView();
    $this->getResponse()->appendBody(
      $view->render($script),
      $name
    );
  }



Zend_View.php-Klasse

<?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 &#39;Zend/View/Abstract.php&#39;;
/**
 * 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(&#39;short_open_tag&#39;) ? false : true;
    if ($this->_useViewStream) {
      if (!in_array(&#39;zend.view&#39;, stream_get_wrappers())) {
        require_once &#39;Zend/View/Stream.php&#39;;
        stream_wrapper_register(&#39;zend.view&#39;, &#39;Zend_View_Stream&#39;);
      }
    }
    if (array_key_exists(&#39;useStreamWrapper&#39;, $config)) {
      $this->setUseStreamWrapper($config[&#39;useStreamWrapper&#39;]);
    }
    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 &#39;zend.view://&#39; . func_get_arg(0);
    } else {
      include func_get_arg(0);
    }
  }
}

wird standardmäßig automatisch verwendet. Durch den Controller wird Zend_View durch die Render-Methode instanziiert und Anschließend wird es in die entsprechende Ansichtsdatei erneut gerendert. Natürlich können Sie Zend_View selbst instanziieren und dann verwenden.

action默认指向的文件是和action的名称相同,如果要指定视图文件,可以通过$this->render的相关方法指定.也可以通过addScriptPath和setScriptPath设置视图文件的目录。

例如

$view = new Zend_View();
$view->addScriptPath(&#39;/www/app/myviews&#39;);
$view->addScriptPath(&#39;/www/app/viewscomm&#39;);
// 如果调用 $view->render(&#39;example.php&#39;), Zend_View 将
// 首先查找 "/www/app/myviews/example.php", 找不到再找"/www/app/viewscomm/example.php", 如果还找不到,最后查找当前目录下/的"example.php".

Zend_View的常用方法

public function __construct($config = array())

构造函数参数

例如

array(
 &#39;escape&#39; => array(),
 &#39;encoding&#39; => 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 = &#39;Zend_View&#39;)
/**
* 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 = &#39;Zend_View&#39;)
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 = &#39;Zend_View_Helper_&#39;)Adds to the stack of helper paths in LIFO order.
public function setHelperPath($path, $classPrefix = &#39;Zend_View_Helper_&#39;)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(&#39;name&#39;, $value) assigns a variable called &#39;name&#39;
* 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(&#39;roles&#39;, $roles);
$this->view->assign(&#39;num&#39;, $num);
$this->view->assign(&#39;a&#39;, $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(&#39;View&#39;);
  $view = $boot->getResource(&#39;View&#39;);
        $view->setHelperPath(&#39;Sql/View/Helper&#39;, &#39;Sql_View_Helper&#39;);
}

action中

/**
 *
 * @return void
 */
public function listAction()
{
  $this->view->assign(&#39;data&#39;, $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; ?>

Das obige ist der detaillierte Inhalt vonDie Ansichtskomponente Zend_View von Zend Framework. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn