使用fastadmin后台一键生成CRUD和菜单。admin模块接口和后台返回数据表字段类型为
enum
都会加上额外的field_text
注释,例如:
数据表字段status:0=正常,1=禁用
、接口会多返回一个字段"status_text": "正常"
,admin
模块下zh-cn
目录下生成和控制器名一致的article
文件。而api模块用的lang
下没有该文件,复制一份过去显示没问题,维护成本增加。
├─application 应用目录
│ ├─admin admin模块配置文件目录
│ │ ├─zh-cn.php admin模块语言配置文件
│ │ └─zh-cn admin模块语言配置文件夹
│ │ │ └─article.php 文章语言配置文件
...
│ ├─api api模块配置文件目录
│ │ ├─zh-cn.php api模块语言配置文件
│ │ └─zh-cn api模块语言配置文件夹
admin/lang/zh-cn/article.php
语言包
<?php
return [
'Id' => 'ID',
'Title' => '标题',
'Intro' => '简介',
'Content' => '内容',
'Image' => '封面图',
'Type' => '类型',
'Type 0' => '类型0',
'Type 1' => '类型1',
'Type 2' => '类型2',
'Type 3' => '类型3',
'Hits' => '点击次数',
'Weigh' => '权重',
'Status' => '状态',
'Status 0' => '正常',
'Status 1' => '禁用',
'Createtime' => '创建时间',
'Updatetime' => '更新时间',
'Deletetime' => '删除时间'
];
解决思路:
在api
模块中引用admin
模块的lang
,在api/lang/zh-cn.php
顶部加入如下代码,虽然可以解决
但是这么多文件加起来也很麻烦。
use think\Lang;
//Lang::load(APP_PATH."admin/lang/zh-cn/*.php");//不支持通配符
Lang::load(APP_PATH."admin/lang/zh-cn/article.php");//加载资讯语言包
在
common/controller/Api.php
控制器基类中,把loadlang
方法中的模块改成admin
,这样就不用每个都加了,自动根据当前控制器加载对应语言包。
$this->loadlang($controllername);// 加载当前控制器语言包
/**
* 加载语言文件
* @param string $name
*/
protected function loadlang($name)
{
$name = Loader::parseName($name);
$name = preg_match("/^([a-zA-Z0-9_\.\/]+)\$/i", $name) ? $name : 'index';
$lang = $this->request->langset();
$lang = preg_match("/^([a-zA-Z\-_]{2,10})\$/i", $lang) ? $lang : 'zh-cn';
$module = 'admin';//$this->request->module();
Lang::load(APP_PATH . $module . '/lang/' . $lang . '/' . str_replace('.', '/', $name) . '.php');
}
网友评论