class_name . '.' . strtoupper($field)); if (!is_array($temps)) { throw new \Exception(__FUNCTION__ . "에서 {$field}의 데이터가 array가 아닙니다.\n" . var_export($temps, true)); } $options = [ ["" => lang($this->class_name . '.label.' . $field) . ' 선택'], lang($this->class_name . '.' . strtoupper($field)) ]; break; } return $options; } protected function getFormFieldInput(string $field, string $value, array $inputs = []): array { switch ($field) { case 'status': $inputs[$field] = form_dropdown( $field, $this->getFormFieldOption($field), $value ); break; case 'updated_at': case 'created_at': $inputs[$field] = form_input($field, $value, ["class" => " calender"]); break; default: $inputs[$field] = form_input($field, $value); break; } return $inputs; } final public function getFormFieldInputs(array $inputs = []): array { foreach ($this->fields as $field) { if (is_array($field)) { throw new \Exception(__FUNCTION__ . "에서 field array 입니다.\n" . var_export($field, true)); } $inputs = $this->getFormFieldInput($field, old($field) ?? DEFAULTS['EMPTY'], $inputs); } return $inputs; } protected function getFormFieldRule(string $field, array $rules): array { if (is_array($field)) { throw new \Exception(__FUNCTION__ . "=> field가 array 입니다.\n" . var_export($field, true)); } switch ($field) { default: $rules[$field] = $this->_model->getFieldRule($field, $rules);; break; } return $rules; } final public function getFormFieldRules(array $rules = []): array { foreach ($this->fields as $field) { $rules = $this->getFormFieldRule($field, $rules); } return $rules; } //전송된 데이터 검증 protected function validateFormData(): void { //변경할 값 확인 : Upload된 파일 검증시 $this->request->getVar()보다 먼처 체크필요 $validation = \Config\Services::validation(); $validation->setRules($this->getModel()->getFieldRules($this->fields)); if (!$validation->withRequest($this->request)->run()) { throw new \Exception("데이터 검증 오류발생\n" . implode("\n", $this->validator->getErrors())); } } //전송된 데이터 protected function getFormData(string $field): void { switch ($field) { default: $this->formDatas[$field] = rtrim($this->request->getVar($field)); break; } } //전송된 데이터 재정의 protected function convertFormData(string $field): void { switch ($field) { default: break; } } final public function create_form_process(): RedirectResponse|string { helper(['form']); try { $this->create_init(); $this->forminputs = $this->getFormFieldInputs(); $this->session->keepFlashdata(SESSION_NAMES['RETURN_URL']); return view( $this->view_path . "/" . strtolower($this->class_name) . "/create", ['viewDatas' => $this->getAttributes()] ); } catch (\Exception $e) { log_message("error", $e->getMessage()); return redirect()->to($this->session->getFlashdata(SESSION_NAMES['RETURN_URL']) ?: "/")->with(SESSION_NAMES['RETURN_MSG'], $e->getMessage()); } } abstract protected function create_process_submit(): mixed; final protected function create_process(): mixed { $this->getModel()->transStart(); try { $this->create_init(); $this->validateFormData(); foreach ($this->fields as $field) { $this->getFormData($field); } foreach ($this->fields as $field) { $this->convertFormData($field); } $entity = $this->create_process_submit(); log_message("notice", __FUNCTION__ . "=>{$entity->getTitle()} 작업을 완료하였습니다."); return redirect()->to($this->_session->getFlashdata(SESSION_NAMES['RETURN_URL']) ?: "/"); } catch (\Exception $e) { //Transaction Rollback $this->getModel()->transRollback(); log_message("error", $e->getMessage()); $this->session->setFlashdata(SESSION_NAMES['RETURN_MSG'], __FUNCTION__ . " 실패하였습니다.\n" . $e->getMessage()); $this->session->keepFlashdata(SESSION_NAMES['RETURN_URL']); return redirect()->back()->withInput(); } } }