1.控制器
什么是控制器?
简而言之,一个控制器就是一个类文件,
是以一种能够和 URI 关联在一起的方式来命名的。
考虑下面的 URI:
项目名/index.php/blog/
上例中,CodeIgniter 将会尝试查询一个名为 Blog.php 的控制器并加载它。
当控制器的名称和 URI 的第一段匹配上时,它将会被加载。
<?php
/**
文件名必须是大写字母开头,如:'Blog.php' 。
另外,一定要确保你的控制器继承了父控制器类,这样它才能使用父类的方法。
**/
class Bob extends CI_Controller
{
/**
* 上例中,方法名为 index() 。"index" 方法总是在 URI 的 第二段 为空时被调用。 另一种显示 "Hello World" 消息的方法是:
example.com/index.php/blog/index/
*/
public function index()
{
echo 'hello world';
}
public function comments()
{
echo 'look at this';
}
}
<?php
/**
文件名必须是大写字母开头,如:'Blog.php' 。
另外,一定要确保你的控制器继承了父控制器类,这样它才能使用父类的方法。
**/
class Bob extends CI_Controller
{
/**
* 上例中,方法名为 index() 。"index" 方法总是在 URI 的 第二段 为空时被调用。 另一种显示 "Hello World" 消息的方法是:
example.com/index.php/blog/index/
*/
public function index()
{
echo 'hello world';
}
public function comments()
{
echo 'look at this';
}
}
(3)通过 URI 分段向你的方法传递参数
<?php
/**
文件名必须是大写字母开头,如:'Blog.php' 。
另外,一定要确保你的控制器继承了父控制器类,这样它才能使用父类的方法。
**/
class Bob extends CI_Controller
{
/**
*
* 上例中,方法名为 index() 。"index" 方法总是在 URI 的 第二段 为空时被调用。 另一种显示 "Hello World" 消息的方法是:
项目名/index.php/blog/index/
*/
//http://127.0.0.1:8081/CodeIgniter-3.0.2/index.php/bob/index
public function index()
{
echo 'hello world';
}
//http://127.0.0.1:8081/CodeIgniter-3.0.2/index.php/bob/comments
public function comments()
{
echo 'look at this';
}
//http://127.0.0.1:8081/CodeIgniter-3.0.2/index.php/bob/shoes/vans/12 输出vans 12
//通过 URI 分段向你的方法传递参数
//如果你的 URI 多于两个段,多余的段将作为参数传递到你的方法中。
//如果你使用了 URI 路由 ,传递到你的方法的参数将是路由后的参数。
public function shoes($scandal,$id)
{
echo $scandal;
echo '<br/>';
echo $id;
}
}
(4)定义默认控制器
(5)重映射方法
正如上文所说,URI 的第二段通常决定控制器的哪个方法被调用。CodeIgniter 允许你使用 _remap() 方法来重写该规则:
public function _remap()
{
// Some code here...
}
如果你的控制包含一个 _remap() 方法,
那么无论 URI 中包含什么参数时都会调用该方法。
它允许你定义你自己的路由规则,
重写默认的使用 URI 中的分段来决定调用哪个方法这种行为。
public function _remap($method)
{
if ($method === 'some_method')
{
$this->$method();
}
else
{
$this->default_method();
}
}
(6)输出
/**
*CodeIgniter 有一个输出类,它可以自动的将最终数据
发送到你的浏览器。 更多信息可以阅读 视图 和 输出类 页面。
但是,有时候, 你
* 可能希望对最终的数据进行某种方式的后处理,然后你自己手
* 工发送到浏览器。CodeIgniter 允许你向你的控制器中添加一个
* _output() 方法,该方法可以接受最终的输出数据。
如果你的控制器含有一个 _output() 方法,输出类将会调用该
方法来显示数据, 而不是直接显示数据。该方法的第一个参数
包含了最终输出的数据。
* 请注意,当数据传到 _output() 方法时,数据已经是最终
* 状态。这时基准测试和计算内存占用都已经完成,
* 缓存文件也已经写到文件(如果你开启缓存的话),HTTP
* 头也已经发送(如果用到了该 特性)。
* 为了使你的控制器能正确处理缓存,_output() 可以这样写:
* @param $output
*/
public function _output($output)
{
// echo $output;
if ($this->output->cache_expiration > 0)
{
$this->output->_write_cache($output);
}
}
(7)私有方法
/**
* 私有方法
有时候你可能希望某些方法不能被公开访问,要实现这点,只要简单的将方法声明为 private 或 protected ,
* 这样这个方法就不能被 URL 访问到了。例如,如果你有一个下面这个方法:
使用下面的 URL 尝试访问它,你会发现是无法访问的:
项目名/index.php/bob/_utility/
注解
为了向后兼容原有的功能,在方法名前加上一个下划线前缀也可以让该方法无法访问。
*/
private function _utility()
{
// some code
}