Skip to content

数据字典装载器

DictLoader用于加载和管理系统中的字典数据,支持从不同来源加载配置信息。

文件目录 niucloud\core\dict\DictLoader.php

php
class DictLoader extends Loader
{
    // 命名空间
    protected $namespace = '\\core\\dict\\';
    
    // 配置名称
    protected $config_name = 'dict';
    
    // 获取默认驱动
    protected function getDefault()
    {
        return 'Config';
    }
}

需要注意装载器的core\Dict目录和app\Dict目录是不同的:

core\Dict 功能主要是具体的字典的调用方法的定义,相当于功能实现。

app\Dict 功能主要是各个类型的数据字典的枚举定义,以及通过core\Dict完成对于第三方开发者定义的扩展数据字典的加载。

plaintext
├─niucloud           niucloud-admin框架核心目录
│  ├─core                
│  │  ├─dict
│  │  │  ├─BaseDict.php                                   #系统基础字典
│  │  │  ├─Config.php                                     #配置字典
│  │  │  ├─Console.php                                    #控制台字典        
│  │  │  ├─DictLoader.php                                 #字典加载器
│  │  │  ├─DiyFormComponent.php                           #自定义表单组件字典   
│  │  │  ├─DiyFormTemplate.php                            #自定义表单模板字典
│  │  │  ├─DiyFormType.php                                #自定义表单类型字典
│  │  │  ├─Event.php                                      #执行事件字典
│  │  │  ├─GrowthRule.php                                 #成长规则字典
│  │  │  ├─Lang.php                                       #语言包字典
│  │  │  ├─MemberAccountChangeType.php                    #加载账户变动方式
│  │  │  ├─MemberBenefits.php                             #会员权益字典
│  │  │  ├─MemberGift.php                                 #会员礼品字典
│  │  │  ├─Menu.php                                       #加载菜单
│  │  │  ├─Notice.php                                     #通知类字典
│  │  │  ├─PointRule.php                                  #积分规则字典
│  │  │  ├─Poster.php                                     #海报字典
│  │  │  ├─Printer.php                                    #打印机字典
│  │  │  ├─RechargeGift.php                               #充值礼品字典
│  │  │  ├─Route.php                                      #路由字典
│  │  │  ├─Schedule.php                                   #计划任务字典
│  │  │  ├─SowCommunityGift.php                           #社区礼品字典  
│  │  │  ├─UniappComponent.php                            #系统uniapp组件配置
│  │  │  ├─UniappLink.php                                 #系统uniapp页面链接字典
│  │  │  ├─UniappPages.php                                #系统uniapp页面字典
│  │  │  ├─UniappTemplate.php                             #UniApp模板字典

数据字典装载器的功能是动态加载第三方开发者开发的功能插件代码中,定义的数据字典扩展。 数据字典装载器最终实现数据字典扩展与系统内置数据字典的合并。 系统会自动先加载框架内置数据字典(app\dict),然后附加第三方数据字典项。 BaseDict 是所有数据字典的基类,BaseDict 继承自 Storage(配置文件驱动类),其他具体类是BaseDict 的子类实现。各个子类的主要职能是实现自己数据字典的加载(Load方法)

最终,系统会通过字典装载器 DictLoader 完成 各个数据字典的装载。

如在自定义页面中,系统会动态加载第三方开发者定义的页面 代码 app/dict/diy/PageDict.php文件中,有如下代码实现:

php
class PageDict
{

    /**
     * 获取页面类型
     * @param string $type
     * @return array|string
     */
    public static function getPageType($type = '')
    {
        $system_pages = [
            'DIY_INDEX' => [
                'title' => get_lang('dict_diy.page_index'),
                'page' => 'pages/index/index',
            ],
            'DIY_MEMBER_INDEX' => [
                'title' => get_lang('dict_diy.page_member_index'),
                'page' => 'pages/member/index',
            ],
            'DIY_PAGE' => [
                'title' => get_lang('dict_diy.page_diy'),
                'page' => 'pages/index/diy',
            ]
        ];
        $pages = (new DictLoader("UniappPages"))->load($system_pages);
        if (empty($type)) {
            return $pages;
        }
        return $pages[ $type ] ?? '';
    }

}

$pages = (new DictLoader("UniappPages"))->load($system_pages);

通过以上方法完成了具体的数据字典的扩展。 其他数据字典的使用类似。

一般来说,数据字典装载器不需要开发者来定义,只需要知道niucloud-admin框架对这一块的设计就可以了。会按照教程进行具体的业务功能开发就足够了。

基于 MIT 协议发布