20.5.3 CodeIgniter的Controller(控制器)
在CodeIgniter中,一个Controller就是一个类文件,Controller所属的类和普通的PHP类几乎没有区别,唯一的不同是Controller类的命名方式,它所采用的命名方式可以使该类和URI关联起来。例如下面这个URL地址,就说明了这个问题。
www.mysite.com/index.php/news/
当访问到上面这个地址时,CodeIgniter会尝试找一个名叫news.php的控制器(Controller),然后加载它。当一个Controller的名字匹配URI段的第一部分,即news时,它就会被加载。代码20-4演示创建一个简单的Controller类。
代码20-4 使用CodeIgniter的Controller hello.php
01 <?php
02 class Hello extends Controller
03 {
04 function index()//方法index()
05 {
06 echo'Hello World!';
07 }
08 }
09 ?>
把它保存在application/controllers/目录下,以本书为例,通过浏览器访问地址http://localhost/ch20/index.php/hello,可以看到如图20-4所示的执行结果。
注意 在CodeIgniter中,类名首字母必须大写。
例如下面的代码写法就是不正确的。
<?php
class hello extends Controller
{
//do something
}
?>
【代码解析】代码20-4定义了一个Hello,它继承于Controller类,Controller类是CodeIgniter控制器基类,所有的控制器都将从这个类派生。这个例子中用到的方法名是index()。如果URI的第二部分为空,会默认载入“index”方法,这也就是说,也可以将地址写成http://localhost/ch20/index.php/hello/index来访问hello.php。
由此可知,URI的第二部分决定调用控制器中哪个方法,代码20-5演示了在Hello控制器中加入了其他方法,此时hello.php如下所示。
代码20-5 为Controller添加方法hello.php
01 <?php
02 class Hello extends Controller
03 {
04 function index()//方法index()
05 {
06 echo'Hello World!';
07 }
08
09 function saylucky()//添加方法saylucky()
10 {
11 echo'It\'s time to say"Good Luck"!';
12 }
13 }
14 ?>
【代码解析】第9~13行添加了一个方法saylucky(),此时通过地址http://localhost/ch20/index.php/hello/saylucky访问hello.php,可以看到如图20-5所示的效果。
如果URI超过两个部分,那么超过的部分将被作为参数传递给相关方法。例如地址www.mysite.com/index.php/products/shoes/sandals/123,URI中的sandals和123将被当做参数传递给products类的方法shoes。代码20-6演示了这种用法,仍然以hello.php为例,完整代码如下所示。
代码20-6 向Controller的方法传递参数hello.php
01 <?php
02 class Hello extends Controller
03 {
04 function index()//方法index()
05 {
06 echo'Hello World!';
07 }
08
09 function saylucky()//方法saylucky()
10 {
11 echo'It's time to say"Good Luck"!';
12 }
13
14 function sayhello($name)//添加带参数的方法sayhello()
15 {
16 echo"Hello,$name!";
17 }
18 }
19 ?>
【代码解析】第14~17行创建的sayhello()方法带一个参数,假设为方法sayhello()传递参数“michael”,通过地址http://localhost/ch20/index.php/hello/sayhello/michael访问hello.php,可以看到如图20-6所示的结果。
共有条评论 网友评论