123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- <?php
- /**
- *------------------------------------------------------
- * 全局数据字典的调用,提供配置缓存的类型
- *------------------------------------------------------
- *
- * @author qqiu@qq.com
- * @date 2016/5/26 11:17
- * @version V1.0
- *
- */
- namespace App\Services\Base;
- use App\Models\BaseDictDataModel;
- use Illuminate\Support\Facades\Cache;
- class DictData
- {
- private $_dict;
- private $_model;
- private $_mmCache = 'table_dict_data_all';
- public function __construct() {
- if( !$this->_model ) $this->_model = new BaseDictDataModel();
- }
- /**
- * 取得数据字典对应数据
- *
- * @param string $table_code 数据字典的类型
- * @param string $code 数据字典代码
- * @param string $val 数据字典数据对应下标
- * @return array 返回数据字典数组
- * @throws CException $table_code, $code 不能为空
- *
- */
- public function get($table_code, $code, $val = null)
- {
- $mKey = Cache::get($this->_mmCache);
- if(isset($mKey[$table_code][$code])) {
- $arr = $mKey[$table_code][$code];
- }else{
- $this->updateCache();
- if(isset($this->_dict[$table_code][$code])) {
- $arr = $this->_dict[$table_code][$code];
- }else{
- $arr = [];
- }
- }
- if(!$arr) {
- return null;
- }
- if(isset($val)) {
- if(array_key_exists($val, $arr)) {
- return $arr[$val];
- }else{
- return '';
- }
- }else{
- return $arr;
- }
- }
- /**
- * 创建Select代码
- *
- * @param string $table_code 数据字典的类型
- * @param string $code 数据字典代码
- * @param string $selection 被选中的值。
- * @param array $htmlOptions
- * 额外的HTML属性:如 [name=>'cate', id=>'cate'] 这些属性作用在select上。
- * 若使用特定关键字empty时,自动创建一个option,
- * empty: 字符串,指定空选项的文本,它的值为空。
- * empty: 数组,option的value值对应key,文本对应value。
- */
- public function select($table_code, $code, $selection = null, $htmlOptions = [])
- {
- $selectOption = $htmlOptions;
- unset($selectOption['empty']);
- $html = "<select";
- foreach($selectOption as $key => $val) {
- $html .= " {$key}=\"{$val}\"";
- }
- $html .= ">\n";
- if (isset ( $htmlOptions ['empty'] )) {
- $value = "";
- $label = $htmlOptions ['empty'];
- if (is_array ( $label )) {
- $value = array_keys ( $label );
- $value = $value [0];
- $label = array_values ( $label );
- $label = $label [0];
- }
- $html .= "<option value=\"{$value}\">{$label}</option>\n";
- }
- $optionHtml = $this->option($table_code, $code, $selection);
- $html .= $optionHtml;
- $html .= "</select>";
- return $html;
- }
- /**
- * 创建select的option选项
- *
- * @param $table_code
- * @param $code
- * @param null $selection
- * @return string
- */
- public function option($table_code, $code, $selection = null)
- {
- $data = $this->get($table_code, $code);
- $html = "";
- foreach ($data as $k => $v) {
- $html .= "<option value=\"{$k}\"";
- if($k == $selection) {
- $html .= " selected ";
- }
- $html .= ">{$v}</option>\n";
- }
- return $html;
- }
- /**
- * 更新对应数据字典,如参数都为空全部更新
- *
- * @param string $table_code 需要更新的类型
- * @param string $code 需要更新的代码
- * @return bool 返回成功失败
- * @throws CException
- */
- public function updateCache()
- {
- $obData = $this->_model->all();
- $dict = array();
- foreach($obData as $key => $value) {
- $dict[$value->dict_table_code][$value->dict_code][$value->value] = $value->name;
- }
- $this->_dict = $dict;
- Cache::forever($this->_mmCache, $this->_dict);
- return true;
- }
- }
|