几个关键点
一:改变显示样式
1.自动加载
应该按数据库里的样式。来展现对应的题型
2.手动改变
触发不同的类型,改变不同的题型
3.如何把多选的选项录入到数据库
一般使用params来当做传入的变量,一般使用rows来当做,输出的变量
因此,录入的时候,要使用
```
if ($this->request->isPost()) {
$params = $this->request->post("row/a");
if ($params) {
$params = $this->preExcludeFields($params);
$type = intval($params['type']) - 1;
$params['selectdata'] = $params['selectdata' . $type];
$selectarr = json_decode($params['selectdata'], true);
$params['selectnumber'] = count($selectarr);
$params['answer'] = $params['answer' . $type];
foreach ($selectarr as $key => $value) {
if (empty($value['key']) && $value['key'] != '0') {
$this->error("请填写选项" . ($key + 1));
}
if (empty($value['value']) && $value['value'] != '0') {
$this->error("请填写选项" . ($key + 1) . "答案内容");
}
unset($selectarr[$key]['checked']);
}
$params['selectdata'] = json_encode($selectarr);
if (count(array_unique(array_map('strtolower', array_column($selectarr, 'key')))) != count($selectarr)) {
$this->error("请不要输入重复选项!【选项不区分大小写】");
}
if (count(array_unique(array_column($selectarr, 'value'))) != count($selectarr)) {
$this->error("请不要输入重复选项答案!");
}
if ($type == '1') {
$params['answer'] = implode(',', $params['answer']);
}
if (empty($params['answer']) && $params['answer'] != '0') {
$this->error("请选择正确答案!");
}
$result = false;
Db::startTrans();
try {
//是否采用模型验证
if ($this->modelValidate) {
$name = str_replace("\model\", "\validate\", get_class($this->model));
$validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.edit' : $name) : $this->modelValidate;
$row->validateFailException(true)->validate($validate);
}
$result = $row->allowField(true)->save($params);
Db::commit();
} catch (ValidateException $e) {
Db::rollback();
$this->error($e->getMessage());
} catch (PDOException $e) {
Db::rollback();
$this->error($e->getMessage());
} catch (Exception $e) {
Db::rollback();
$this->error($e->getMessage());
}
if ($result !== false) {
$this->success();
} else {
$this->error(__('No rows were updated'));
}
}
$this->error(__('Parameter %s can not be empty', ''));
}
4