我们来创建一个简单的控制器,以便更直观地了解其工作原理。使用你的文本编辑器,创建一个名为 blog.php 的文件,然后输入下列代码:
<?php
class Blog extends CI_Controller
{
function __construct() {
parent::__construct();
}
public function index() {
echo 'Hello World!';
}
}
?>
然后保存文件到 application/controllers/ 文件夹。
现在使用类似这样的 URL 访问你的站点:
example.com/index.php/blog/
如果你做的没错,你应该看到Hello World!.
注意:类名必须以大写字母开头。换句话说,这是有效的:
<?php
class Blog extends CI_Controller {
}
?>
下面的blog首字母b小写,是属于无效的写法:
<?php
class blog extends CI_Controller {
}
?>
同时,始终确保你的控制器扩展自父控制器类,以便它能够继承其所有的方法。
控制器中方法的含义
上面的例子中用到的方法名是 index()。如果 URI 的第二部分为空的话,会默认载入 “index” 方法。也可以将地址写成这样来访问 “Hello World”: example.com/index.php/blog/index/
URI 的第二部分是用来决定调用控制器中哪个方法的。
我们再来试试。在你的控制器中加入一个新的方法:
<?php
class Blog extends CI_Controller
{
function __construct() {
parent::__construct();
}
public function index() {
echo 'Hello World!';
}
public function comments() {
echo '看这里!';
}
}
?>
注意: 如果你要使用某个子文件夹下的功能,就要保证 URI 的第一个片段是用于描述这个文件夹的。例如说你有一个控制器在这里:
application/controllers/products/shoes.php
调用这个控制器的时候你的 URI 要这么写:
example.com/index.php/products/shoes/show/123
你的每个子文件夹中需要包含一个默认的控制器,这样如果 URI 中只有子文件夹而没有具体功能的时候它将被调用。只要将你作为默认的控制器名称在 application/config/routes.php 文件中指定就可以了。
CodeIgniter 也允许你使用 URI 路由 功能来重新定向 URI。
构造函数
如果要在你的任意控制器中使用构造函数的话,那么必须在里面加入下面这行代码:
parent::__construct();
这行代码的必要性在于,你此处的构造函数会覆盖掉这个父控制器类中的构造函数,所以我们要手动调用它。
<?php
class Blog extends CI_Controller {
public function __construct()
{
parent::__construct();
}
}
?>