lang($this->class_path . '.label.' . $field) . ' 선택', ...lang($this->class_path . '.' . strtoupper($field)), ]; break; } // dd($options); return $options; } final protected function getFormFieldOptions(array $options = []): array { foreach ($this->filter_fields as $field) { if (is_array($field)) { throw new \Exception(__FUNCTION__ . "에서 field array 입니다.\n" . var_export($field, true)); } $options = $this->getFormFieldOption($field, $options); } return $options; } final protected function getFormFieldRules(array $rules = []): array { foreach ($this->fields as $field) { if (is_array($field)) { throw new \Exception(__FUNCTION__ . "=> field가 array 입니다.\n" . var_export($field, true)); } $rules = $this->getMyLibrary()->getMyStorage()->getFieldRule($field, $rules); } // var_dump($rules); // exit; return $rules; } //전송된 데이터 protected function getFormData(string $field): void { switch ($field) { default: $this->formDatas[$field] = $this->request->getVar($field); break; } } final protected function getFormDatas(): void { foreach ($this->fields as $field) { $this->getFormData($field); } } //전송된 데이터 재정의 protected function convertFormData(string $field): void { switch ($field) { default: break; } } final protected function convertFormDatas(): void { foreach ($this->fields as $field) { $this->convertFormData($field); } } //전송된 데이터 검증 protected function validateFormData(string $field): void { switch ($field) { default: if ( !$this->validation->check( $this->formDatas[$field], $this->getMyLibrary()->getMyStorage()->getFieldRule($field) ) ) { throw new \Exception("데이터 검증 오류발생\n" . implode("\n", $this->validation->getError())); } break; } } final protected function validateFormDatas(): void { //변경할 값 확인 : Upload된 파일 검증시 $this->request->getVar()보다 먼처 체크필요 $this->validation = service('validation'); foreach ($this->fields as $field) { $this->validateFormData($field); } } // 생성 final protected function create_form_process(): RedirectResponse|string { helper(['form']); try { $this->session->keepFlashdata(SESSION_NAMES['RETURN_URL']); $this->forms = ['attributes' => ['method' => "post",], 'hiddens' => []]; return view( strtolower($this->class_path) . "/create", data: ['viewDatas' => $this->getViewDatas()] ); } 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()); } } final protected function create_process(): mixed { $this->getMyLibrary()->getMyStorage()->transStart(); try { $this->create_process_submit(); return redirect()->to($this->session->getFlashdata(SESSION_NAMES['RETURN_URL']) ?: "/"); } catch (\Exception $e) { //Transaction Rollback $this->getMyLibrary()->getMyStorage()->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(); } } // 수정 final protected function modify_form_process(): RedirectResponse|string { helper(['form']); try { $this->session->keepFlashdata(SESSION_NAMES['RETURN_URL']); $this->forms = ['attributes' => ['method' => "post",], 'hiddens' => []]; return view( strtolower($this->class_path) . "/modify", ['viewDatas' => $this->getViewDatas()] ); } 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()); } } final protected function modify_process(): mixed { $this->getMyLibrary()->getMyStorage()->transStart(); try { $this->modify_process_submit(); return redirect()->to($this->session->getFlashdata(SESSION_NAMES['RETURN_URL']) ?: "/"); } catch (\Exception $e) { //Transaction Rollback $this->getMyLibrary()->getMyStorage()->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(); } } // 리스트 protected function list_condition($isTotalCount = false): void { //조건절 처리 foreach ($this->filter_fields as $field) { $this->$field = $this->request->getVar($field) ?: DEFAULTS['EMPTY']; if ($this->$field !== DEFAULTS['EMPTY']) { $this->getMyLibrary()->getMyStorage()->setList_FieldFilter($field, $this->$field); } } //검색어 처리 $this->word = $this->request->getVar('word') ?: DEFAULTS['EMPTY']; if ($this->word !== DEFAULTS['EMPTY']) { $this->getMyLibrary()->getMyStorage()->setList_WordFilter($this->word); } //검색일 처리 $this->start = $this->request->getVar('start') ?: DEFAULTS['EMPTY']; $this->end = $this->request->getVar('end') ?: DEFAULTS['EMPTY']; if ($this->start !== DEFAULTS['EMPTY'] && $this->end !== DEFAULTS['EMPTY']) { $this->getMyLibrary()->getMyStorage()->setList_DateFilter($this->start, $this->end); } if (!$isTotalCount) { //Sorting 처리 $this->order_field = $this->request->getVar('order_field') ?: DEFAULTS['EMPTY']; $this->order_value = $this->request->getVar('order_value') ?: DEFAULTS['EMPTY']; if ($this->order_field !== DEFAULTS['EMPTY'] && $this->order_value !== DEFAULTS['EMPTY']) { $this->getMyLibrary()->getMyStorage()->setList_OrderBy("{$this->order_field} {$this->order_value}"); } } } //Totalcount 처리 protected function list_total(): int { $this->list_condition(true); $total_count = $this->getMyLibrary()->getMyStorage()->countAllResults(); // dd($this->getMyLibrary()->getMyStorage()->getLastQuery()); return $total_count; } //PageNation 처리 protected function list_pagination($pager_group = 'default', int $segment = 0, $template = 'default_full'): string { //Page, Per_page필요부분 $this->page = (int)$this->request->getVar('page') ?: 1; $this->per_page = (int)$this->request->getVar('per_page') ?: intval(getenv("mvc.default.list.per_page")); //줄수 처리용 $page_options = array("" => "줄수선택"); for ($i = $this->per_page; $i <= $this->total_count; $i += $this->per_page) { $page_options[$i] = $i; } $this->page_options = $page_options; // 1.Views/Pagers/에 bootstrap_full.php,bootstrap_simple.php 생성 // 2.app/Config/Pager.php/$templates에 'bootstrap_full => 'Pagers\bootstrap_full', // 'bootstrap_simple' => 'Pagers\bootstrap_simple', 추가 $pager = service("pager"); // $this->getMyLibrary()->getMyStorage()->paginate($this->per_page, $pager_group, $this->page, $segment); $pager->makeLinks( $this->page, $this->per_page, $this->total_count, $template, $segment, $pager_group ); $this->page = $pager->getCurrentPage($pager_group); $this->total_page = $pager->getPageCount($pager_group); return $pager->links($pager_group, $template); } protected function list_entitys(): array { $this->list_condition(); if ($this->page) { $this->getMyLibrary()->getMyStorage()->limit( $this->per_page, $this->page * $this->per_page - $this->per_page ); } $entitys = $this->getMyLibrary()->getMyStorage()->findAll(); // dd($this->getMyLibrary()->getMyStorage()->getLastQuery()); return $entitys; } public function list_process(): string { try { //URL처리 $this->uri = $this->request->getUri(); //total 처리 $this->total_count = $this->list_total(); //pagenation 처리 $this->pagination = $this->list_pagination(); //모델 처리 $this->entitys = $this->list_entitys(); //setting return_url to session flashdata $this->session->setFlashdata(SESSION_NAMES['RETURN_URL'], current_url() . '?' . $this->request->getUri()->getQuery() ?: ""); return view( strtolower($this->class_path) . "/index", ['viewDatas' => $this->getViewDatas()] ); } catch (\Exception $e) { log_message("error", $e->getMessage()); return alert_CommonHelper($e->getMessage(), "back"); // return redirect()->back()->with('return_message', $e->getMessage()); } } }