tp5.1 之 Hook 钩子

在正常的的程序之外想要改动少的增加一些别的功能

现在admin模块下的behavior下创建Ceshi.php文件

钩子里面的方法的命名规范   驼峰写法(注意:如果一个钩子名称绑定了多个行为,从左往右执行,如果中间那一层hook返回了false ,啧当前的钩子执行完这个行为之后的行为都无法被触发,但是原程序继续执行)

//Ceshi.php  钩子,当前的行为类演示多个行为的情景

<?
namespace app\admin\behavior;

class Ceshi 
{
	
    /**************行为类只有一个行为*********************/

    /* public function run()
    {
        echo 'only one';
        return true;
    }*/


    /**********************类里面有多个行为,按下面写**************************/
	public function initTest($params)
	{
		echo 'this is hook 1';
		dump($params);
		return true;
	}
	
	public function initTest2($params)
	{
		echo 'this is hook 2';
		dump($params);
		return true;
	}
}

1,动态绑定钩子

/*测试controller*/

<?
namespace app\admin\controller;

use think\facade\Hook;

class Index
{
    //绑定多个行为类,动态绑定
    public function getHooke()
    {
        //动态绑定加这个
    	Hook::add('init_test', ["app\\admin\\behavior\\Ceshi"]);
    	Hook::add('init_test2', "app\\admin\\behavior\\Ceshi");
        
    //调用,当程序执行到这里时就会调用app\\admin\\behavior\\Ceshi里面的init_test行为方法
    	Hook::listen('init_test', ['name' => 'wawa']);
    	Hook::listen('init_test2', ['age' => 20]);
    	echo '成功';
    }
    
}

2,配置文件绑定钩子直接运用应用下的钩子或者模块下的钩子,本文直接用的是app应用下的配置

打开app\tag.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 <[email protected]>
// +----------------------------------------------------------------------

// 应用行为扩展定义文件
return [
    // 应用初始化
    'app_init'     => [],
    // 应用开始
    'app_begin'    => [],
    // 模块初始化
    'module_init'  => [],
    // 操作开始执行
    'action_begin' => [],
    // 视图内容过滤
    'view_filter'  => [],
    // 日志写入
    'log_write'    => [],
    // 应用结束
    'app_end'      => [],
    
    //钩子名称映射
    'init_test'    => [
        app\admin\behavior\Ceshi::class
    ],
    'init_test2'   => [
        app\admin\behavior\Ceshi::class
    ],
    
];

调用直接看index.php的那个方法,也是listen

发布了7 篇原创文章 · 获赞 0 · 访问量 1382

猜你喜欢

转载自blog.csdn.net/Vency__/article/details/100888633