为了使所有的模板文件能够看起来足够简洁和便于理解,在模板文件的编写上将尽量的用少的代码及多的常用代码来进行讲解,而且在模板文件中较多的代码仍为普通的HTML代码;所以在下面涉及到的 css 文件和 js 文件都是以空文件的形式来引用,使用空文件的原因主要是为说明相关函数的功能特性,同时对模板文件进行解释的主要内容也在ZF2的函数上。
### 5.3.1 模板文件layout.phtml
下面是代码内容:
~~~
<?php echo $this->doctype(); ?>
<html>
<head>
<meta charset="utf-8">
<?php echo $this->headTitle($this->translate('doc title')); ?>
<?php echo $this->headMeta()->appendName('viewport', 'width=device-width, initial-scale=1.0'); ?>
<?php echo $this->headLink()->prependStylesheet($this->basePath() . '/css/style.css'); ?>
<?php echo $this->headScript()->prependFile($this->basePath() . '/js/jquery.min.js'', 'text/javascript');?>
</head>
<body>
<table border="1" cellspacing="0" cellspadding="0" width="100%">
<tr>
<td>header</td>
</tr>
<tr><td><?php echo $this->content; ?></td></tr>
<tr><td>footer</td></tr>
</table>
</body>
</html>
~~~
模板内容解释:
echo $this->doctype() 文档使用的类型,这个类型与在模块配置文件中设置的类型有关
echo $this->headTitle(); 输出文档标题
$this->translate('doc title') 转换文档标题,此函数功能的实现需要语言包的支持
echo $this->headMeta() 输出HTML人 Meta 属性
appendName('viewport', 'width=device-width, initial-scale=1.0') 设置Meta 属性的具体内容
echo $this->headLink() 输出link标签
prependStylesheet($this->basePath() . '/css/style.css') 设置link标签属性
$this->basePath() 获取站点根路径
echo $this->headScript() 输出 script 标签
prependFile($this->basePath() . '/js/jquery.min.js'', 'text/javascript') 设置 script 标签属性
echo $this->content 输出控制器对应的模板页面内容
以上的内容就是一个简单的layout 而已模板,没有复杂的代码,没有复杂的样式;布局的结构最后将呈现出 上-中-下 的三行结构;上部放置导航内容,中部放置页面主要内容,下部放置版权信息等。所以最终看到的界面大概如下所示:
header 头部内容
content 正文内容
footer 底部内容
### 5.3.2 错误异常模板 index.phtml
下面是代码内容:
~~~
<h1><?php echo $this->translate('An error occurred') ?></h1>
<h2><?php echo $this->message ?></h2>
<?php if (isset($this->display_exceptions) && $this->display_exceptions): ?>
<?php if(isset($this->exception) && $this->exception instanceof Exception): ?>
<hr/>
<h2><?php echo $this->translate('Additional information') ?>:</h2>
<h3><?php echo get_class($this->exception); ?></h3>
<dl>
<dt><?php echo $this->translate('File') ?>:</dt>
<dd>
<pre class="prettyprint linenums"><?php echo $this->exception->getFile() ?>:<?php echo $this->exception->getLine() ?></pre>
</dd>
<dt><?php echo $this->translate('Message') ?>:</dt>
<dd>
<pre class="prettyprint linenums"><?php echo $this->exception->getMessage() ?></pre>
</dd>
<dt><?php echo $this->translate('Stack trace') ?>:</dt>
<dd>
<pre class="prettyprint linenums"><?php echo $this->exception->getTraceAsString() ?></pre>
</dd>
</dl>
<?php
$e = $this->exception->getPrevious();
if ($e) :
?>
<hr/>
<h2><?php echo $this->translate('Previous exceptions') ?>:</h2>
<ul>
<?php while($e) : ?>
<li>
<h3><?php echo get_class($e); ?></h3>
<dl>
<dt><?php echo $this->translate('File') ?>:</dt>
<dd>
<pre class="prettyprint linenums"><?php echo $e->getFile() ?>:<?php echo $e->getLine() ?></pre>
</dd>
<dt><?php echo $this->translate('Message') ?>:</dt>
<dd>
<pre class="prettyprint linenums"><?php echo $e->getMessage() ?></pre>
</dd>
<dt><?php echo $this->translate('Stack trace') ?>:</dt>
<dd>
<pre class="prettyprint linenums"><?php echo $e->getTraceAsString() ?></pre>
</dd>
</dl>
</li>
<?php
$e = $e->getPrevious();
endwhile;
?>
</ul>
<?php endif; ?>
<?php else: ?>
<h3><?php echo $this->translate('No Exception available') ?></h3>
<?php endif ?>
<?php endif ?>
~~~
代码解释:
echo $this->message 输出错误信息
if (isset($this->display_exceptions) && $this->display_exceptions) 判断是否显示异常信息
echo get_class($this->exception) 输出异常类型名称
echo $this->exception->getFile() 输出导致异常的文件名
echo $this->exception->getLine() 输出导致异常文件的所在行
echo $this->exception->getMessage() 输出异常信息
echo $this->exception->getTraceAsString() 输出异常堆栈信息
$e = $this->exception->getPrevious() 获取上一个异常
以上是错误异常模板内容,模板能够输出导致错误异常的文件名、出错所在行、错误类型等信息。在开发项目的时候便可以通过错误的信息提示来查找相关出错原因。理解并正确使用使用错误信息能够有效的提高开发效率。
### 5.3.3 404错误模板 404.phtml
下面是代码内容:
~~~
<h1><?php echo $this->translate('A 404 error occurred') ?></h1>
<h2><?php echo $this->message ?></h2>
<?php if (isset($this->reason) && $this->reason): ?>
<?php
$reasonMessage= '';
switch ($this->reason) {
case 'error-controller-cannot-dispatch':
$reasonMessage = $this->translate('The requested controller was unable to dispatch the request.');
break;
case 'error-controller-not-found':
$reasonMessage = $this->translate('The requested controller could not be mapped to an existing controller class.');
break;
case 'error-controller-invalid':
$reasonMessage = $this->translate('The requested controller was not dispatchable.');
break;
case 'error-router-no-match':
$reasonMessage = $this->translate('The requested URL could not be matched by routing.');
break;
default:
$reasonMessage = $this->translate('We cannot determine at this time why a 404 was generated.');
break;
}
?>
<p><?php echo $reasonMessage ?></p>
<?php endif ?>
<?php if (isset($this->controller) && $this->controller): ?>
<dl>
<dt><?php echo $this->translate('Controller') ?>:</dt>
<dd><?php echo $this->escapeHtml($this->controller) ?>
<?php
if (isset($this->controller_class)
&& $this->controller_class
&& $this->controller_class != $this->controller
) {
echo '(' . sprintf($this->translate('resolves to %s'), $this->escapeHtml($this->controller_class)) . ')';
}
?>
</dd>
</dl>
<?php endif ?>
<?php if (isset($this->display_exceptions) && $this->display_exceptions): ?>
<?php if(isset($this->exception) && $this->exception instanceof Exception): ?>
<hr/>
<h2><?php echo $this->translate('Additional information') ?>:</h2>
<h3><?php echo get_class($this->exception); ?></h3>
<dl>
<dt><?php echo $this->translate('File') ?>:</dt>
<dd>
<pre class="prettyprint linenums"><?php echo $this->exception->getFile() ?>:<?php echo $this->exception->getLine() ?></pre>
</dd>
<dt><?php echo $this->translate('Message') ?>:</dt>
<dd>
<pre class="prettyprint linenums"><?php echo $this->exception->getMessage() ?></pre>
</dd>
<dt><?php echo $this->translate('Stack trace') ?>:</dt>
<dd>
<pre class="prettyprint linenums"><?php echo $this->exception->getTraceAsString() ?></pre>
</dd>
</dl>
<?php
$e = $this->exception->getPrevious();
if ($e) :
?>
<hr/>
<h2><?php echo $this->translate('Previous exceptions') ?>:</h2>
<ul>
<?php while($e) : ?>
<li>
<h3><?php echo get_class($e); ?></h3>
<dl>
<dt><?php echo $this->translate('File') ?>:</dt>
<dd>
<pre class="prettyprint linenums"><?php echo $e->getFile() ?>:<?php echo $e->getLine() ?></pre>
</dd>
<dt><?php echo $this->translate('Message') ?>:</dt>
<dd>
<pre class="prettyprint linenums"><?php echo $e->getMessage() ?></pre>
</dd>
<dt><?php echo $this->translate('Stack trace') ?>:</dt>
<dd>
<pre class="prettyprint linenums"><?php echo $e->getTraceAsString() ?></pre>
</dd>
</dl>
</li>
<?php
$e = $e->getPrevious();
endwhile;
?>
</ul>
<?php endif; ?>
<?php else: ?>
<h3><?php echo $this->translate('No Exception available') ?></h3>
<?php endif ?>
<?php endif ?>
~~~
代码解析:
echo $this->message 输出错误信息
if (isset($this->reason) && $this->reason) 判断是否存在错误,$this->reason 有多种类型,控制器路由分发错误(error-controller-cannot-dispatch)、控制器不存在(error-controller-not-found)、无效控制器(error-controller-invalid)、路由不匹配(error-router-no-match)及其他
$this->controller 表示控制器名
$this->controller_class 表示控制器类名
以上内容是404错误提示模板内容;模板能够输出导致错误异常的文件名、出错所在行、错误类型等信息。在后继开发中可以通过404的相关提示信息找到出错的问题点。
- 序言
- 第1章 Zend Framework2 简介
- 1.1 Zend Framework2 简介
- 1.2 下载安装
- 1.3 搭建开发环境
- 第2章 创建ZF2项目
- 2.1 新建一个项目
- 2.2 配置网站
- 2.3 伪静态 .htaccess文件
- 2.4 添加启动/入口文件
- 2.5 添加全局配置文件
- 2.6 添加自动加载文件 init_autoloader.php
- 2.7 IndexController 控制器
- 第3章 创建模块文件
- 3.1 Module 文件
- 3.2 module.config 文件
- 3.2.1 router 路由配置
- 3.2.2 controllers控制器配置
- 3.2.3 view_manager 视图管理器
- 3.2.4 service_manager 服务管理器
- 3.2.5 translator 翻译器
- 3.2.6 navigation 导航条
- 第4章 创建控制器
- 4.1 控制器简介
- 4.2 新建控制器
- 4.3 添加控制器的Action
- 第5章 创建视图模板
- 5.1 创建模板
- 5.2 模板配置
- 5.3 编写布局和错误异常模板
- 5.4 编写Action 对应的模板文件
- 5.5 访问 IndexAction
- 第6章 创建模型
- 6.1 ORM 对象映射法
- 6.2 使用分页导航
- 6.3 自定模型
- 6.4 章节总结
- 第7章 实例应用
- 7.1 建立Album 模块
- 7.2 添加模块文件
- 7.3 添加模块配置文件
- 7.4 创建数据表 album
- 7.5 添加模型文件
- 7.6 添加表单 AlbumForm
- 7.7 添加控制器 AlbumController
- 7.8 添加模板文件
- 第8章 用户认证
- 8.1 建立数据表
- 8.2 新建认证类
- 8.3 引用认证类
- 第9章 结束语