ThinkPHP控制器操作绑定到类以及空控制器空操作

来源:互联网 发布:淘宝技术排查异常订单 编辑:程序博客网 时间:2024/06/07 20:21
ThinkPHP的控制器是一个类,继承自ThinkPHP的核心类Controller,采用驼峰命名法命名,
控制器修饰的每一个public方法都是操作方法,采用驼峰命名法,可以从外部访问,
前置和后置操作是在执行某个操作方法之前和之后会自动调用的方法,仅对访问控制器有效,
可以通过配置ACTION_SUFFIX的值来改变操作方法的书写形式,
系统在找不到操作方法时,会指定到一个空的操作方法
ThinkPHP文件夹下的Conf下的convention.php,是框架的惯例配置
在Home文件夹下,有一个控制器文件夹,Controller,其下的控制器文件
dump();这个函数的作用就是输出打印,是ThinkPHP下特有的。
在Home下的controller下面有控制器indexCintroller.clas.php,这个里面有命名空间,和
一个继承ThinkPHP核心类的一个类,这个类下面可以写方法,function _before_index()是
前置操作,感觉就和构造函数一个意思,在执行某个操作方法之前自动调用他,
还有一个就是 function _after_index()是后置操作,如果我们想要在输入
localhost/think时输出一些东西,就这样写
  public function _before_index(){
          echo "这是一个前置操作。</br>";
      }
      public function index(){
      echo "no!</br>";
      }
      public function _after_index(){
          echo "这是一个后置操作</br>";
      }
如果想要执行里面的特定方法,需要现在Home/Conf/config.php中添加一个配置,就是
关于操作方法后缀的:  'ACTION_SUFFIX'            =>    '_Action'//操作方法后缀
然后在前面的控制器中,添加一个方法: public function ok_Action(){
          echo "hello world!";
想要执行特定的方法的话,那就,在URL中写:http://localhost/think/index.php/Home/index/ok

就酱紫成功的输出了hello world!.

当配置ACTION_SUFFIX(定义操作方法后缀)后,再输入URL为http://localhost/think//index.php/Home/inde就会报错,当然,在之前的话输入左边的URL,会依次输出

前置操作,中间定义的方法以及后置操作,我尝试了将中间的方法名改为index1,但是在此输入上面这个域名时,报错无法加载控制器,查阅后发现,index意为索引,该函数非自定义函数,其有特殊意义,我尝试在前置操作以及后置操作中间夹杂其他函数,也不会输出,但是把index移动到后置操作后面依然是按照上端代码顺序输出,感觉还是理解的不够好,浮于表面。

PS:当定义了操作方法后缀后,控制器中的前置操作与后置操作也需要加上操作方法后缀,操作方法后缀只不过是为了解决方法名和系统关键字冲突的问题;





当输入URL定位到一个不存在的控制器的时候,通常会报错,但是如果我们不想让他报错,就定义一个空的控制器,就像在URL中写:http://localhost/think/index.php/Home/user/index

实际上并没有user这个控制器,这是就会报错,若不想让他报错,就在Home下的控制器文件夹中新建一个名为EmptyController.class.php,其内容为:

<?php
namespace Home\Controller;
use Think\Controller;
class EmptyController extends Controller {
    function _empty(){
        echo "这是错误的信息。";
    }

}

?>

这样,我们就可以在输入不存在的控制器时就会调用这个EmptyController,并用特定的内容进行输出了;




若要将操作绑定到类,则在Home的配置文件中添加'    'ACTION_BIND_CLASS'        =>    True                  //操作方法绑定到类;'

之后在Home的控制器文件夹下新建一个Index文件夹,其中新建index.class.php文件,内容为:

<?php
namespace Home\Controller\index;
use Think\Controller;
class index extends Controller{
    
public function run(){
        echo "bind action";
}
}

?>

之后输入URL:http://localhost/think/页面输出bind action;

操作绑定到类后同样可以支持空控制器,

在Home的控制器文件夹下新建一个_empty文件夹,建立一个新文件,命名为index.class.php

其内容为:

<?php

namespace Home\Controller\_empty;
use Think\Controller;
class index extends Controller {
    
    function run(){
        echo "这是信息。";
        
    }
}

这样,若找不到当前控制器,则到_empty下,当我们输入URL为http://localhost/think/index.php/Home/bucunzai 类似的不存在的方法时会自动调用定义的_empty

如果是空操作呢,就是不存在的操作,就像:输入URL为http://localhost/think/index.php/Home/Index/bucunzai

控制器Index中并不存在bucunzai这个操作,Index文件夹里只有all.calss.php和index.class.php两个操作,因为操作绑定到类了,所以就这样有两个类在控制器下作为操作,但是没有bucunzai.class.php,这是就在Index控制器下新建一个_empty.class.php,内容为:

<?php
namespace Home\Controller\index;
use Think\Controller;
class _empty extends Controller {
    function run(){
        echo "这是一个不存在的操作,所以空操作就到这里来了";
    }

}

?>

这样空操作就跳转到这了,但是如果输入http://localhost/think/index.php/Home/KONG/bucunzai的话依然报错,因为KONG这个控制器下没有空操作

如果是空控制器下的空操作呢,就在空控制器下创建一个空操作php就好了,记得改命名空间

操作绑定到类是因为当做大项目时,在一个类里会有很多方法,这样就太复杂太乱了,所以就把这些操作分成一个个的类,放在控制器下的某个文件夹中,作为一个控制器的操作。




控制器的意思其实就是一个文件夹,下面有后缀为.class.php的文件,这些文件都是一个个继承于核心类的子类,里面的方法就是一个个的操作,通过输入URL中的控制器和操作名称,执行某项操作。

如果直接用记事本修改PHP可能会报错,详情请见http://www.bubuko.com/infodetail-287297.html



0 0
原创粉丝点击