ホームページ  >  記事  >  バックエンド開発  >  Zend Framework のビュー コンポーネント Zend_View

Zend Framework のビュー コンポーネント Zend_View

不言
不言オリジナル
2018-05-04 16:17:421190ブラウズ

この記事は、Zend Framework チュートリアルのビュー コンポーネント Zend_View の使用法を主に紹介し、ビュー コンポーネント Zend_View の原理をより詳細に分析し、必要な友人が参照できるように Zend_View の使用スキルを分析します。

この記事の例では、ビュー コンポーネント Zend_View の使用法に関する Zend Framework チュートリアルについて説明します。参考のために皆さんと共有してください。詳細は次のとおりです:

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
│ §── php
│ §── Fieldset.php
│ っていつ── FormButton.php
│ っていつ── FormCheckbox.php
│ っていつ── FormElement.php
│ っていつ── FormErrors.php
│ っていつ── FormFile.php
│ っていつ── FormHidden.php
│ っていつ── FormImage.php
│ っていつ── FormLabel.php
│ っていってください。 .php
│ ─ FormText.php
│ ├─ Gravatar.php
│ っていつ─ HeadLink.php
│ っていつ─ HeadMeta.php
│ っていってください。 §── HeadTitle.php
│ っていつ── HtmlElement.php
│ っていつ── HtmlFlash.php
│ っていつ── HtmlList.php
│ っていつ── HtmlPage.php
│ ─HtmlQuicktime.php
│ っていつ─ InlineScript.php
│ っていつ─ Interface.php
│ っていってください。 php
│ │ til ─ HelperAbstract.php
│ │ っていつ─ Helper.php
│ │ §─ Links.php
│ │ っていってください。 ─ Navigation.php
│ ├─ PaginationControl.php
│ §─ Partial
│ │ └─ Exception.php
│ ├─ PartialLoop.php
│ っていつ─ Partial.php
│ っていつ─ プレースホルダー │ │ §── コンテナ │
│ │ §── レジストリ
│ │ | .php
│ っていつ── Translate.php
│ っていつ── Url.php
│ └── UserAgent.php
│ │ |
└── Stream.php

6 ディレクトリ、70 ファイル


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(&#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 クラス


りー


デフォルトでは、Zend_View はコントローラを介して render メソッドを通じて自動的にインスタンス化され、対応するビュー ファイルの中間にレンダリングされます。もちろん、Zend_View を自分でインスタンス化して使用することもできます。

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; ?>

以上がZend Framework のビュー コンポーネント Zend_Viewの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。