thinkphp 扩展 - 行为

行为(Behavior)是在预先定义好的一个应用位置执行的一些操作。类似于AOP编程中的“切面”的概念,给某一个切面绑定相关行为就成了一种类AOP编程的思想。所以,行为通常是和某个位置相关,行为的执行时间依赖于绑定到了哪个位置上。

1、创建behavior文件夹,创建行为类

<?php


namespace app\index\behavior;


class Test
{
    /**
     * run函数必须存在
     * @param $params
     * @return mixed
     */
    public function run(&$params)
    {
        // 行为逻辑
        return $params;
    }
    public function  fun1(&$params){
        return '4'. $params;
    }
    public function test1(){
        return 1;
    }
}


// 如果注册的行为位标签不是自定义函数名称:fun1,没有run函数直接报错
// 如果注册的行为标签是自定义函数名称,没有run函数也会执行,与函数名一致且大写
//'Fun1'     =>[
//    'app\\index\\behavior\\Test'
//] 在tags。php中注册,这样子就不会报错了

2、在app/tags.php文件下注册行为

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------

// 应用行为扩展定义文件
return [
    // 应用初始化
    'app_init'     => [],
    // 应用开始
    'app_begin'    => [],
    // 模块初始化
    'module_init'  => [],
    // 操作开始执行
    'action_begin' => [],
    // 视图内容过滤
    'view_filter'  => [],
    // 日志写入
    'log_write'    => [],
    // 应用结束
    'app_end'      => [
        // 记录操作日志
//        'app\\index\\behavior\\AdminLog'
    ],
    'test1'         =>[
        'app\\index\\behavior\\Test'
    ],
    'qq'         =>[
        'app\\index\\behavior\\Demo'
    ],
    'sms_notice'      =>[
        'app\\index\\behavior\\Notice'
    ],
    'sms'      =>[
        'app\\index\\behavior\\Aa'
    ],
//    'Fun1'     =>[
//        'app\\index\\behavior\\Test'
//    ]
];

3、在控制器中调用行为类

<?php


namespace app\index\controller;
use app\common\controller\Bases;
use think\Hook;

//应用行为函数类:给某一个切面绑定相关行为就成了一种类AOP编程的思想。
//在application\tags.php文件注册
//该行为类写在behavior文件夹下
class Beha extends Bases
{
    public function index(){
        $title = '我是title11';
        //这种使用方式是该行为没有在tags.php文件注册,使用add方式添加行为
        Hook::add('FUn1','app\\index\\behavior\\Test');
        dump(Hook::listen('FUn1',$title));die;
    }
    public function demo1(){
        $title = 'iii';
        dump(Hook::listen('test1',$title));die;

    }
    public function demo2(){
        $params = ['sss'];
        Hook::listen("qq",$params);
    }
    public function demo3(){
        $params = ['sss'];
        $result = Hook::listen('sms_notice', $params, null, true);
        dump($result);die;
    }
    public function demo4(){
        $params = ['sss'];
        $result = Hook::listen('sms', $params, null, true);
        dump($result);die;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值