幾個關鍵點
一:改變顯示樣式
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