第 35 章 Zend_View

目录

35.1. 简介
35.1.1. 控制器脚本
35.1.2. 视图脚本
35.2. 控制器脚本
35.2.1. 变量赋值
35.2.2. 调用视图脚本并打印输出
35.2.3. 视图脚本的路径
35.3. 视图脚本
35.3.1. 转义输出(Escaping Output)
35.3.2. 使用模板系统
35.4. 视图助手(View Helper)
35.4.1. 基本的助手
35.4.2. Helper 的路径
35.4.3. 编写自定义的Helper类

35.1. 简介

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

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

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

35.1.1. 控制器脚本

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

<?php
//使用一个模型来获取书籍作者和标题相关数据
$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_Loader::loadClass('Zend_View');
$view = new Zend_View();
$view->books = $data;

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

35.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()来转义输出。