你要做的第一件事情是新建一个 控制器 来处理静态页面,控制器就是一个简单的类, 用来完成你的工作,它用来控制请求与代码之间的关系 。
但是现在,请看下文。
新建一个文件 application/controllers/Pages.php ,然后添加如下代码。
<?php
class Pages extends CI_Controller {
public function view($page = 'home')
{
}
}
控制器将会成为你的 Web 应用程序中的处理请求的核心 。和其他的 PHP 类一样,可以在 你的控制器中使用 $this 来访问它,通过 $this 你可以加载类库、 视图、以及针对框架的一般性操作。等下你就知道了。
现在,你已经创建了你的第一个方法,是时候创建一些基本的模板了,我们将 新建两个视图分别作为我们的页头和页尾。
新建页头文件 application/views/templates/header.php 并添加以下代码:
<html>
<head>
<title>CodeIgniter Tutorial</title>
</head>
<body>
<h1><?php echo $title; ?></h1>
application/views/templates/footer.php ,然后加上以下代码:
<br/><em>© 2015</em>
</body>
</html>
在控制器中添加少少逻辑
刚刚新建了一个控制器,里面有一个 view() 方法,这个方法接受一个参数 用于指定要加载的页面,静态页面模板位于 application/views/pages/ 目录。在该目录中,再新建两个文件 home.php 和 about.php ,在每个文件里随便 写点东西然后保存它们。
为了加载这些页面,你需要先检查下请求的页面是否存在:
public function view($page = 'home')
{
$data['title'] = ucfirst($page); // 首字母大写
$this->load->view('templates/header', $data);
$this->load->view('pages/'.$page, $data);
$this->load->view('templates/footer', $data);
}
在页头文件中,$title 变量用来自定义页面的标题,它是在这个方法中赋值的, 但是注意的是并不是直接赋值给 title 变量,而是赋值给一个 $data 数组的 title 元素。
最后要做的是按顺序加载所需的视图,view() 方法的第二个参数用于向视图传递参数, $data 数组中的每一项将被赋值给一个变量,这个变量的名字就是数组的键值。 所以控制器中 $data['title'] 的值,就等于视图中的 $title 的值。
路由
注:[你的前缀]一开始会是类似 localhost/CodeIgniter-3.1.11 的文字(本地测试时)。控制器现在开始工作了!在你的浏览器中输入 [你的前缀]index.php/pages/view 来查看你的页面。当你访问 index.php/pages/view/about 时你将看到 about 页面, 包括页头和页脚。
使用自定义的路由规则,你可以将任意的 URI 映射到任意的控制器和方法上,从而打破 默认的规则。
让我们来试试。打开文件 application/config/routes.php 然后添加如下两行代码, 并删除掉其他对 $route 数组赋值的代码。
$route['default_controller'] = 'pages/view';
$route['(:any)'] = 'pages/view/$1';
一个正则表达式(左) 映射到(=) 类和方法(右)
当有请求到来时,CodeIgniter 首先查找能匹配的第一条规则,然后调用相应的控制器和方法,可能还带有参数。
你可以在关于 URI 路由的文档 中找到更多信息。
这里,第二条规则中 $routes 数组使用了通配符 (:any) 可以匹配所有的请求, 然后将参数传递给 Pages 类的 view() 方法。
现在访问 index.php/about 。路由规则是不是正确的将你带到了控制器中的 view() 方法?
真是太棒了!
没有评论:
发表评论