ThinkCMF 5.0钩子使用说明

在代码中埋入钩子,然后执行到埋点时,会调用钩子方法,获得结果。
而使用者可以花式实现钩子,这样代码灵活性很高。
下面是cmf如何自定义后台登陆界面的钩子使用实例

配置说明配置

文件在 vendor/thinkcmf/src/App.php 294行左右引入12行,会判断app目录下是否有tags.php文件,有则引入配置文件

  $module = $module ? $module . DIRECTORY_SEPARATOR : '';
        $path   = $this->appPath . $module;

        if (empty($module) || empty(static::$modulesInited[$module])) {
            // 加载初始化文件
            if (is_file($path . 'init.php')) {
                include $path . 'init.php';
            } elseif (is_file($this->runtimePath . $module . 'init.php')) {
                include $this->runtimePath . $module . 'init.php';
            } else {
                // 加载行为扩展文件
                if (is_file($path . 'tags.php')) {
                    $tags = include $path . 'tags.php';
                    if (is_array($tags)) {
                        $this->hook->import($tags);
                    }
                }

配置文件如下

return [
    'admin_login'    => [
        'app\\portal\\behavior\\AdminLoginBehavior',
    ],
];

指定钩子执行的方法(数组类型)。钩子可以有多个执行方法,按照数组中顺序执行

实现钩子

class AdminLoginBehavior
{
    protected static $run = false;

    // 行为扩展的执行入口必须是run
    public function run()
    {
        if (self::$run) {
            return;
        }
        self::$run = true;
        $view = View::instance();
        $view->assign('site_info', cmf_get_option('site_info'));
        return $view->fetch(":login");
    }
}

入口函数为run方法,其他无特殊要求

其他说明

上面是自定义后台登陆页面的钩子实现
埋点代码在vendor/thinkcmf/cmf-app/src/admin/controller/PublicController.php 38行左右下面第6行。即为钩子埋点

$admin_id = session('ADMIN_ID');
        if (!empty($admin_id)) {//已经登录
            return redirect(url("admin/Index/index"));
        } else {
            session("__SP_ADMIN_LOGIN_PAGE_SHOWED_SUCCESS__", true);
            $result = hook_one('admin_login');
            if (!empty($result)) {
                return $result;
            }
            return $this->fetch(":login");
        }

cmf钩子文档

https://www.kancloud.cn/thinkcmf/doc5_1/963034
cmf后台有很多钩子,按照返回值定义,返回指定的返回值类型即可

thinkphp钩子文档

https://www.kancloud.cn/manual/thinkphp5_1/354129

你可能感兴趣的:(ThinkCMF 5.0钩子使用说明)