需要注意装载器的core\Dict目录和app\Dict目录是不同的
core\Dict 功能主要是具体的字典的调用方法的定义,相当于功能实现
app\Dict 功能主要是各个类型的数据字典的枚举定义,以及通过core\Dict完成对于第三方开发者定义的扩展数据字典的加载
├─niucloud niucloud-admin框架核心目录
│ ├─core
│ │ ├─dict
│ │ │ ├─BaseDict 数据字典驱动类的基类
│ │ │ ├─DictLoader 数据字典装载器
│ │ │ ├─Event 事件字典驱动类
│ │ │ ├─Lang 多语言字典驱动类
│ │ │ ├─MemberAccountChangeType 会员账户变动类型字典驱动类
│ │ │ ├─Menu 菜单字典驱动类
│ │ │ ├─Notice 消息提醒(模版)字典驱动类
│ │ │ ├─UniappComponent Uniapp端组件字典驱动类
│ │ │ ├─UniappLink Uniapp端超级链接字典驱动类
│ │ │ ├─UniappPages Uniapp端页面字典驱动类
数据字典装载器的功能是动态加载第三方开发者开发的功能插件代码中,定义的数据字典扩展。
数据字典装载器最终实现数据字典扩展与系统内置数据字典的合并。
系统会自动先加载框架内置数据字典(app\dict),然后附加第三方数据字典项。
BaseDict 是所有数据字典的基类,BaseDict 继承自 Storage(配置文件驱动类),其他具体类是BaseDict 的子类实现。各个子类的主要职能是实现自己数据字典的加载(Load方法)
最终,系统会通过字典装载器 DictLoader 完成 各个数据字典的装载。
如在自定义页面中,系统会动态加载第三方开发者定义的页面
代码 app/dict/diy/PageDict.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框架对这一块的设计就可以了。会按照教程进行具体的业务功能开发就足够了。