分享学习心得,记录学习笔记
文章:44   访问:119720
今天是:
2020年02月23日 星期日
  >   文章列表   >   文章详情
参考资料:ThinkPHP5.0完全开发手册:https://www.kancloud.cn/manual/thinkphp5/118130

通过ThinkPHP的开发手册学习了下ThinkPHP的行为功能,下面是学习笔记。  

行为操作就像调试时候打log(标签位)一样,执行到锚点了就触发一个操作(行为),行为出错不会影响程序的整体运行。

过程:

1.系统执行的所有操作都可以归类为行为,具体怎么归类开发者自己定。比如:用户注册前用户名校验、登录成功后记录日志等等。

2.触发行为的地方叫做“标签位”,系统执行到标签位就触发这个标签位对应的行为内容。ThinkPHP自带有这几个标签位:

标签位描述
app_init应用初始化标签位
app_begin应用开始标签位
module_init模块初始化标签位
action_begin控制器开始标签位
view_filter视图输出过滤标签位
app_end应用结束标签位
log_write日志write方法标签位
log_write_done日志写入完成标签位(V5.0.10+
response_send响应发送标签位(V5.0.10+
response_end输出结束标签位(V5.0.1+

3.“标签位”也可以由我们指定,用\think\Hook类的listen方法

Hook::listen('say_hello');

允许传递一个参数,由于这个参数是引用传值,因此必须是变量

Hook::listen('say_hello',$params);

4.定义标签位之后,还需要定义“行为”

写一个类,包含一个方法run即可

namespace app\index\behavior;

class Mybehavior
{
public function run(&$params)
{
echo "Hello";
}
}

如果行为类中要写多个标签这样写(标签名采用驼峰命名),执行行为时会自动根据标签位名找到对应方法

namespace app\index\behavior;

class Mybehavior
{
public function sayHello(&$params)
{
echo "Hello";
}

public function sayGoodbye(&$params)
{
echo "goodbye";
}
}

5.有了“标签位”,有了“行为”,还需要将二者绑定到一起,用\think\Hook类的add方法(绑定到类即可)

Hook::add('say_hello','app\\index\\behavior\\Mybehavior');

也可以批量绑定

Hook::add('speak_something',['app\\index\\behavior\\Mybehavoir','app\\index\\behavior\\Mybehavior']);

支持闭包

Hook::add('say_hello',function(){
echo 'Hello';
});

还可以更简单,在APP目录下面或者模块下面用tags.php

return [
'say_hello'=> [
'app\\index\\behavior\\Mybehavior',
],
'say_goodbye'=> [
'app\\admin\\behavior\\Mybehavoir'
]
];

当运行的行为出错时会返回false,行为终止,但是应用继续

结束!



友情链接 doywb

2018-2019 Copyright© 米灵尔 小熊 豫ICP备15007436号-1

豫公网安备 41152302000146号