ThinkPHP实战
上QQ阅读APP看书,第一时间看更新

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”,证明操作后缀配置成功。