Exemplo n.º 1
0
 /**
  * 修改字段处理.
  * 
  * @access public
  * @return void
  */
 public function editAction()
 {
     // 接收数据.
     $data = I('post.');
     $data['modID'] = intval($data['modId']);
     $data['fieldId'] = intval($data['fieldId']);
     $data['lid'] = intval($data['lid']);
     $data['mustFill'] = intval($data['mustFill']);
     $data['jsRules'] = [];
     // jsRules.
     $data['isSearch'] = intval($data['isSearch']);
     // 检查字段 id.
     if ($data['fieldId'] < 1 || empty($data['fieldId'])) {
         $this->error('无效的字段');
     }
     if ($data['modID'] < 1 || empty($data['modID'])) {
         $this->error('无效的模型');
     }
     $modelField = new FieldModel();
     // 实例化 Field 模型.
     $moduleInfo = $modelField->checkValidModule($data['modID']);
     // 模型信息.
     if (FALSE === $modelField) {
         $this->error('无效的模型');
     }
     $fieldInfo = $modelField->fetchValidFieldInfo($data['fieldId']);
     // 未删除的字段信息.
     if (empty($fieldInfo) || $fieldInfo['modID'] != $data['modID']) {
         // 无效的字段或不是同一个模型的字段.
         $this->error('无效的字段');
     }
     $data['fieldName'] = $fieldInfo['fieldName'];
     // 编辑表单未传 fieldName, 增加该值以便验证.
     $data['fieldType'] = $fieldInfo['fieldType'];
     // 编辑表单未传 fieldType, 增加该值以便验证.
     if (!$modelField->validate($modelField->baseRules)->create($data)) {
         // 必填项验证.
         $this->error($modelField->getError());
     }
     // 其它项验证.
     $res = $this->_checkLinkMenu($data['formType'], $data['lid']);
     // 联动菜单.
     if (TRUE !== $res) {
         $this->error($res);
     }
     // 验证表单项, 即表单类型 radio, checkbox, select 时, 表单项设置不能为空.
     $formSets = $data['formSet'];
     $res = $this->_checkFormSets($data['formType'], $formSets);
     // 此处 $formSets 是传址的, 在该方法内部会改变为数组.
     if (TRUE !== $res) {
         $this->error($res);
     }
     // 验证表单项默认值.
     $res = $this->_checkFormDefaultValue($data['formValue'], $data['formType'], $formSets);
     if (TRUE !== $res) {
         $this->error($res);
     }
     $data['formSet'] = serialize($formSets);
     // 序列化存放表单项设置.
     unset($formSets);
     // 验证搜索选项.
     $searchRules = $data['searchRules'];
     $res = $this->_checkSearchRules($data['formType'], $data['isSearch'], $searchRules);
     if (TRUE !== $res) {
         $this->error($res);
     }
     // 搜索规则项为空, 采用 formSet 项, 主要是针对 radio, checkbox, select.
     $data['searchRules'] = empty($searchRules) ? $data['formSet'] : serialize($searchRules);
     // 序列化存放搜索项设置.
     unset($searchRules);
     // 验证规则明细.
     $ruleNames = isset($data['validateRuleNames']) ? $data['validateRuleNames'] : [];
     $ruleValues = isset($data['validateRuleValues']) ? $data['validateRuleValues'] : [];
     $ruleMsgs = isset($data['validateRuleMsgs']) ? $data['validateRuleMsgs'] : [];
     unset($data['validateRuleNames'], $data['validateRuleValues'], $data['validateRuleMsgs']);
     // 删除这几项.
     $data['jsRules'] = $this->resolveValidateRules($ruleNames, $ruleValues, $ruleMsgs);
     // 验证必填项.
     $res = $this->_checkMustFill($data['mustFill'], $data['jsRules']);
     if (TRUE !== $res) {
         $this->error($res);
     } else {
         $data['jsRules'] = serialize($data['jsRules']);
         // 验证成功序列化存放.
     }
     $fieldId = $data['fieldId'];
     // 字段 ID.
     $fieldName = substr($data['fieldName'], strlen($this->_field_prefix));
     unset($data['fieldId']);
     // 删除表单 fieldId.
     unset($data['modId']);
     // 删除表单 modId.
     unset($data['fieldName']);
     // 删除字段名.
     unset($data['fieldType']);
     // 删除字段类型.
     // 编辑入库.
     $modelField->startTrans();
     $res = $modelField->editDataToField($fieldId, $data);
     // $res1 = $modelField->changeModuleStatus($data['modID']);
     $res1 = TRUE;
     if ($res && $res1) {
         $modelField->commit();
         $this->success('编辑字段[ ' . $fieldName . ' ] 成功!', U('lists', ['modId' => $data['modID']]));
     } else {
         $modelField->rollback();
         $this->error('编辑失败');
     }
 }