第 16 章 Zend_View

目录

16.1. 简介
16.1.1. 控制器脚本
16.1.2. 视图脚本
16.2. 控制器脚本
16.2.1. 变量赋值
16.2.2. 调用视图脚本并打印输出
16.2.3. 视图脚本的路径
16.3. 视图脚本
16.3.1. 过滤输出
16.3.2. 模板系统
16.4. 视图协助器(View Helper)
16.4.1. 基本的协助器
16.4.2. Helper 的路径
16.4.3. 编写自定义的Helper类

16.1. 简介

Zend_View是用来在MVC模式中处理“View”部份的一个类。也就是说它用来使View部份的代码与Model及controller部分分离。它提供了helper,output filter,variable escaping等几个功能组件。

Zend_View使用PHP本身作为你的模板,或者你也可以建立其它模板引擎的实例,并用你的view代码来对其进行操作。

使用Zend_View主要有两步: 1. 你的Controller建立一个Zend_View实例,并将需要的变量传递给它; 2. Controller告诉Zend_View显示一个特定的视图,生成View输出的内容。

16.1.1. 控制器脚本

下面是一个简单的例子。你有一个书籍清单,想把它输出来。控制器代码可能看起来是这样的:

<?php
// use a model to get the data for book authors and titles.
$data = array(
    array(
        'author' => 'Hernando de Soto',
        'title' => 'The Mystery of Capitalism'
    ),
    array(
        'author' => 'Henry Hazlitt',
        'title' => 'Economics in One Lesson'
    ),
    array(
        'author' => 'Milton Friedman',
        'title' => 'Free to Choose'
    )
);

//传递数据给Zend_View类的实例 
Zend::loadClass('Zend_View');
$view = new Zend_View();
$view->books = $data;

//调用一段View代码"booklist.php"来显示数据
echo $view->render('booklist.php');
?>
        

16.1.2. 视图脚本

现在我们看看相关的视图代码"booklist.php"。这是一段普通的代码,但是有一点特别:它是在Zend_View实例的内部运行的。(controller传递给Zend_View实例的变量是public的)。一段非常基本的视图代码看起来是这样的:

<?php if ($this->books): ?>
    
    <!-- A table of some books. -->
    <table>
        <tr>
            <th>Author</th>
            <th>Title</th>
        </tr>
        
        <?php foreach ($this->books as $key => $val): ?>
        <tr>
            <td><?php echo $this->escape($val['author']) ?></td>
            <td><?php echo $this->escape($val['title']) ?></td>
        </tr>
        <?php endforeach; ?>
        
    </table>
    
<?php else: ?>
    
    <p>There are no books to display.</p>
    
<?php endif; ?>
        

注意我们使用escapte()来过滤输出。