平时网站项目采用thinkphp5.1有必要用钩子、行为和中间件吗?

2023-03-15    分类: 网站建设

ThinkPPHP中的钩子和行为放在一起说,说因为他们两个是结合在一起用的,行为主要指的是我们需要执行的一些逻辑操作。下面列举一些常见的应用场景:
1、网站后台管理的每一个页面都需要进行身份和权限验证,这时候可以在项目中用一个钩子,在页面生命周期事件action_begin中插入一个事件用于执行验证行为。
2、当网站项目需要维护时,用户打开每一个页面显示维护信息,这时候可以在页面生命周期app_init中插入一个事件,显示维护信息和终止其他生命事件的执行。
3、加载一下公用的数据,只需要在action执行的事件之前加载数据,页面action操作时就可以直接使用数据。
4、页面执行完毕,进行一些临时的特殊的页面内容输出替换。可以在view_filter事件中操作。
5、对每一个页面做一些特殊的监控,可以在app_end或者response_end事件中加入操作逻辑。
除了以上列举的,还有很多应用场景。
如果不使用钩子,可以吗?答案是肯定的,除了用最笨的方法(在每一个操作前都加段代码)外,还可以定义一个基础控制器类,然后其他所有控制器都继承这个基础类,从而实现上诉功能。
但是钩子有个特别的地方是,代码是放在其他地方,管理方便,同时更加方便在每个生命周期插入事件,更加方便。

行为定义

app_init 应用初始化标签位 无参数
app_dispatch 应用调度标签位 无参数
app_begin 应用开始标签位 无参数
module_init 模块初始化标签位 无参数
action_begin 控制器开始标签位 当前的callback参数
view_filter 视图输出过滤标签位 当前模板渲染输出内容
app_end 应用结束标签位 当前响应对象实例
log_write 日志write方法标签位 当前写入的日志信息
log_write_done 日志写入完成标签位
response_send 响应发送标签位 当前响应对象
response_end 输出结束标签位 当前响应对象实例
需要注意的是:其中log_write钩子仅在调用Log::write方法的时候执行。
view_filter钩子v5.1.3+版本中已经废除,改用视图类的filter方法过滤。
创新互联建议好在在应用目录下面或者模块的目录下面定义tags.php文件来统一定义行为,因为这种网站架构最清晰,如果通过Hook在页面位置绑定,有些是操作不到,如app_init、app_begin等。
如下定义事件示例如下
return [
// 应用初始化
'app_init' => [
'app\\test\\behavior\\AppInit'
],
// 应用开始
'app_begin' => [
'app\\test\\behavior\\AppBegin'
],
// 模块初始化
'module_init' => [
'app\\test\\behavior\\ModuleInit'
],
// 操作开始执行
'action_begin' => [
'app\\test\\behavior\\ActionBegin'
],
// 视图内容过滤
'view_filter' => [
'app\\test\\behavior\\ViewFilter'
],
// 日志写入
'log_write' => [
'app\\test\\behavior\\LogWrite'
],
// 应用结束
'app_end' => [
'app\\test\\behavior\\AppEnd'
],
];
中间件是用于拦截或过滤应用的HTTP请求,并进行必要的业务处理,是5.1.16+才增加的功能,可以通过路由单独控制器定义,也可以全局定义,使用非常方便。

中间件定义

创新互联认为,用钩子、行为和中间件还是非常有必要使用,可以让你的系统架构更加灵活和优化。

分享名称:平时网站项目采用thinkphp5.1有必要用钩子、行为和中间件吗?
网页地址:https://www.cdcxhl.com/news18/244618.html

成都网站建设公司_创新互联,为您提供小程序开发网站制作云服务器品牌网站设计手机网站建设网站策划

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站托管运营