![ThinkPHP实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/852/26943852/b_26943852.jpg)
4.1 控制器的定义
ThinkPHP控制器的定义非常简单,满足以下两个条件即可:
(1)文件名形如“xxxController.class.php”并存放于“模块/Controller”文件夹下;
(2)继承ThinkPHP的Controller及其子类(有时候我们需要扩展一些公用方法,但又不能改动框架,所以需要子类去继承系统的Controller,以该子类作为新的Controller父类)。
而定义动作只需要在控制器中定义公共方法即可,在Web目录下新建chapter-4文件夹,新建入口文件并完成初始化。
在Application/Home/Controller下新建TestController.class.php,内容如下:
<? php /** * TestController.class.php */ namespace Home\Controller; use Think\Controller; class TestController extends Controller { public function test() { echo ’您访问了home/test/test'; } }
打开浏览器,访问http://localhost/thinkphp-inaction/chapter-4/home/test/test,可以看到浏览器输出了“您访问了home/test/test”。看到这么长的URL,有些读者可能会有点不知所措,实际上,简要地分析一下就很简单了。
● localhost:主机名
● thinkphp-inaction:ApacheWeb目录下的一个子目录
● chapter-4:thinkphp-inaction的子目录
● home:模块名
● 第一个test:控制器名
● 第二个test:动作名
几乎所有的ThinkPHP框架的链接都可以采用这种方式去分析。
如果我们试着访问“http://localhost/thinkphp-inaction/chapter-4/home/test”,浏览器会输出“非法操作:index”的字样,原因是ThinkPHP在检测到未输入动作名时,自动使用控制器的“index”方法作为动作名,但是TestController未定义index方法,所以报错,添加index方法后就可以正常访问了。
动作的定义上文已经提到过,一个public的方法就是一个可以被浏览器访问到的动作,方法名即动作名,但是请注意到下面这个URL:“http://localhost/thinkphp-inaction/chapter-4/home/test/list”,如果按照上文提到的在TestController中添加“public function list()”,编辑器会直接报错,因为“list”是PHP关键字,遇到这种情况的时候就需要配置“操作方法后缀”了。
编辑Application/Home/Conf/config.php,内容如下:
<? php /** * config.php */ return array( 'ACTION_SUFFIX' => 'Action', // 操作方法后缀 );
“ACTION_SUFFIX”就是操作后缀的配置项名称,接下来编辑Application/Home/Controller/TestController.class.php,内容如下:
<? php /** * TestController.class.php */ namespace Home\Controller; use Think\Controller; class TestController extends Controller { public function testAction() { echo ’您访问了home/test/test'; } public function listAction() { echo ’您访问了home/test/list'; } }
打开浏览器访问“http://localhost/thinkphp-inaction/chapter-4/home/test/list”,可以看到浏览器输出了“您访问了home/test/list”,证明操作后缀配置成功。