# 加载静态内容
**Note**: 这篇教程假设你已经下载好 CodeIgniter ,并将其 安装 到你的开发环境。
你要做的第一件事情是新建一个 **控制器** 来处理静态页面,控制器就是一个简单的类, 用来完成你的工作,它是你整个 Web 应用程序的 “粘合剂” 。
例如,当访问下面这个 URL 时:
~~~
http://example.com/news/latest/10
~~~
通过这个 URL 我们就可以推测出来,有一个叫做 "news" 的控制器,被调用的方法为 "latest" , 这个方法的作用应该是查询 10 条新闻条目并显示在页面上。在 MVC 模式里,你会经常看到下面 格式的 URL :
~~~
http://example.com/[controller-class]/[controller-method]/[arguments]
~~~
在正式环境下 URL 的格式可能会更复杂,但是现在,我们只需要关心这些就够了。
新建一个文件 application/controllers/Pages.php ,然后添加如下代码。
~~~
<?php
class Pages extends CI_Controller {
public function view($page = 'home')
{
}
}
~~~
你刚刚创建了一个 Pages 类,有一个方法 view 并可接受一个 $page 参数。 Pages 类继承自 CI_Controller 类,这意味着它可以访问 CI_Controller 类( system/core/Controller.php )中定义的方法和变量。
控制器将会成为你的 Web 应用程序中的处理请求的核心,在关于 CodeIgniter 的技术讨论中,这有时候被称作 超级对象 。和其他的 PHP 类一样,可以在 你的控制器中使用 $this 来访问它,通过 $this 你就可以加载类库、 视图、以及针对框架的一般性操作。
现在,你已经创建了你的第一个方法,是时候创建一些基本的页面模板了,我们将 新建两个视图(页面模板)分别作为我们的页脚和页头。
新建页头文件 application/views/templates/header.php 并添加以下代码:
~~~
<html>
<head>
<title>CodeIgniter Tutorial</title>
</head>
<body>
<h1><?php echo $title; ?></h1>
~~~
页头包含了一些基本的 HTML 代码,用于显示页面的主视图之前的内容。 另外,它还打印出了 $title 变量,这个我们后面讲控制器的时候再讲。 现在,再新建个页脚文件 application/views/templates/footer.php ,然后添加以下代码:
~~~
<em>© 2015</em>
</body>
</html>
~~~
# 在控制器中添加逻辑
你刚刚新建了一个控制器,里面有一个 view() 方法,这个方法接受一个参数 用于指定要加载的页面,静态页面模板位于 application/views/pages/ 目录。
在该目录中,再新建两个文件 home.php 和 about.php ,在每个文件里随便 写点东西然后保存它们。如果你没什么好写的,就写 "Hello World!" 吧。
为了加载这些页面,你需要先检查下请求的页面是否存在:
~~~
public function view($page = 'home')
{
if ( ! file_exists(APPPATH.'views/pages/'.$page.'.php'))
{
// Whoops, we don't have a page for that!
show_404();
}
$data['title'] = ucfirst($page); // Capitalize the first letter
$this->load->view('templates/header', $data);
$this->load->view('pages/'.$page, $data);
$this->load->view('templates/footer', $data);
}
~~~
当请求的页面存在,将包括页面和页脚一起被加载并显示给用户,如果不存在, 会显示一个 "404 Page not found" 错误。
第一行检查页面是否存在,file_exists() 是个原生的 PHP 函数,用于检查某个 文件是否存在,show_404() 是个 CodeIgniter 内置的函数,用来显示一个默认的 错误页面。
在页头文件中,$title 变量用来自定义页面的标题,它是在这个方法中赋值的, 但是注意的是并不是直接赋值给 title 变量,而是赋值给一个 $data 数组的 title 元素。
最后要做的是按顺序加载所需的视图,view() 方法的第二个参数用于向视图传递参数, $data 数组中的每一项将被赋值给一个变量,这个变量的名字就是数组的键值。 所以控制器中 $data['title'] 的值,就等于视图中的 $title 的值。
# 路由
控制器现在开始工作了!在你的浏览器中输入` [your-site-url]index.php/pages/view `来查看你的页面。当你访问` index.php/pages/view/about` 时你将看到 about 页面, 包括页头和页脚。
使用自定义的路由规则,你可以将任意的 URI 映射到任意的控制器和方法上,从而打破 默认的规则:
~~~
http://example.com/[controller-class]/[controller-method]/[arguments]
~~~
让我们来试试。打开文件 application/config/routes.php 然后添加如下两行代码, 并删除掉其他对 $route 数组赋值的代码。
~~~
$route['default_controller'] = 'pages/view';
$route['(:any)'] = 'pages/view/$1';
~~~
CodeIgniter 从上到下读取路由规则并将请求映射到第一个匹配的规则,每一个规则都是 一个正则表达式(左侧)映射到 一个控制器和方法(右侧)。当有请求到来时,CodeIgniter 首先查找能匹配的第一条规则,然后调用相应的控制器和方法,可能还带有参数。
你可以在关于 URI 路由的文档 中找到更多信息。
这里,第二条规则中 $routes 数组使用了通配符 (:any) 可以匹配所有的请求, 然后将参数传递给 Pages 类的 view() 方法。
现在访问 index.php/about 。路由规则是不是正确的将你带到了控制器中的 view() 方法?实在是太棒了!
- 空白目录
- 欢迎使用 CodeIgniter
- 安装说明
- 下载CodeIgniter
- 安装说明
- 从老版本升级
- 疑难解答
- CodeIgniter 概览
- 开始
- CodeIgniter 是什么?
- 支持特性
- 应用程序流程图
- 模型-视图-控制器
- 架构目标
- 教程 - 内容提要
- 加载静态内容
- 读取新闻条目
- 创建新闻条目
- 结束语
- 向 CodeIgniter 贡献你的力量
- 编写 CodeIgniter 的文档
- Developer's Certificate of Origin 1.1
- 常规主题
- CodeIgniter URL
- 控制器
- 保留名称
- 视图
- 模型
- 辅助函数
- 使用 CodeIgniter 类库
- 创建类库
- 使用 CodeIgniter 驱动器
- 创建驱动器
- 创建核心系统类
- 创建附属类
- 钩子 - 扩展框架核心
- 自动加载资源
- 公共函数
- 兼容性函数
- URI 路由
- 错误处理
- 网页缓存
- 程序分析
- 以 CLI 方式运行
- 管理你的应用程序
- 处理多环境
- 在视图文件中使用 PHP 替代语法
- 安全
- PHP 开发规范
- 类库参考
- 基准测试类
- 缓存驱动器
- 日历类
- 购物车类
- 配置类
- Email 类
- 加密类
- 加密类(新版)
- 文件上传类
- 表单验证类
- FTP 类
- 图像处理类
- 输入类
- Javascript 类
- 语言类
- 加载器类