ThinkPHP官网首页

ENGLISH

Manual

6.7 行为扩展

行为扩展和Widget扩展的区别其实就是Widget是用于输出的,而行为通常是执行某个方法,但通常都不需要输出,即使输出的话也许是错误提示信息之类的。

行为是可以和应用扩展配合的,因为应用扩展是很随意的,但是行为却是可以规范的。定义好的行为扩展,可以被任何应用扩展中的标签单独调用。

行为类的定义也很简单,例如下面是一个代理检测访问行为的扩展: 



PHP代码


  1. class AgentCheckBehavior extends Behavior {   

  2.     public function run() {   

  3.         // 代理访问检测   

  4.         if(C('LIMIT_PROXY_VISIT') && ($_SERVER['HTTP_X_FORWARDED_FOR'] || $_SERVER['HTTP_VIA'] || $_SERVER['HTTP_PROXY_CONNECTION'] || $_SERVER['HTTP_USER_AGENT_VIA'])) {   

  5.             // 禁止代理访问   

  6.             exit('Access Denied');   

  7.         }   

  8.     }   

  9. }  



行为类必须定义一个run接口方法,否则无法正确调用。

命名为AgentCheckBehavior.class.php 后 放入项目的Lib\Behavior 目录下面。


接下来就是调用这个行为,在调用的地方只需要使用:



PHP代码


  1. B('AgentCheck');  



配合应用扩展机制的话,例如我们在项目初始化标签的执行方法里面使用了上面的代码,就会在项目初始化的时候自动调用该行为了。