diff --git a/app/Controllers/Admin/UserController.php b/app/Controllers/Admin/UserController.php index 9ab406c..964acb5 100644 --- a/app/Controllers/Admin/UserController.php +++ b/app/Controllers/Admin/UserController.php @@ -36,18 +36,24 @@ class UserController extends AdminController break; case 'index': $fields = ['id', 'name', 'email', 'mobile', 'role', 'status', 'created_at']; - $this->addViewDatas('index_batchjobFields', $this->service->getFormService()->getBatchjobFields($filters)); - $this->addViewDatas('index_batchjobButtions', $this->service->getFormService()->getBatchjobButtons()); break; default: throw new \Exception("지원하지 않는 action입니다.({$action})"); // break; } + $this->service->getFormService()->setFormFields($fields); + $this->service->getFormService()->setFormRules($action, $fields); + $this->service->getFormService()->setFormFilters($filters); + $this->service->getFormService()->getFormOptions($filters); + $this->service->getFormService()->setBatchjobFilters($filters); + $this->addViewDatas('helper', $this->service->getHelper()); - $this->addViewDatas('formFields', $this->service->getFormService()->getFormFields($action, $fields)); - $this->addViewDatas('formFilters', $this->service->getFormService()->getFormFilters($action, $filters)); - $this->addViewDatas('formRules', $this->service->getFormService()->getFormRules($action, $fields)); - $this->addViewDatas('formOptions', $this->service->getFormService()->getFormOptions($action, $filters)); + $this->addViewDatas('formFields', $this->service->getFormService()->getFormFields()); + $this->addViewDatas('formRules', $this->service->getFormService()->getFormRules()); + $this->addViewDatas('formFilters', $this->service->getFormService()->getFormFilters()); + $this->addViewDatas('formOptions', $this->service->getFormService()->getFormOptions()); + $this->addViewDatas('index_batchjobFields', $this->service->getFormService()->getBatchjobFields()); + $this->addViewDatas('index_batchjobButtions', $this->service->getFormService()->getBatchjobButtons()); } protected function create_form_process(): void { diff --git a/app/Controllers/Auth/AuthController.php b/app/Controllers/Auth/AuthController.php index 3f87f43..a91a537 100644 --- a/app/Controllers/Auth/AuthController.php +++ b/app/Controllers/Auth/AuthController.php @@ -36,9 +36,7 @@ abstract class AuthController extends CommonController abstract protected function login_process(): UserEntity; final public function login(): RedirectResponse { - $action = __FUNCTION__; try { - $this->action_init_process($action); $this->login_process(); $redirect_url = $this->getAuthContext()->popPreviousUrl() ?? implode(DIRECTORY_SEPARATOR, $this->getActionPaths()); return redirect()->to($redirect_url)->with('message', MESSAGES['LOGIN']); diff --git a/app/Controllers/Auth/GoogleController.php b/app/Controllers/Auth/GoogleController.php index 1804fe8..691e120 100644 --- a/app/Controllers/Auth/GoogleController.php +++ b/app/Controllers/Auth/GoogleController.php @@ -32,11 +32,17 @@ class GoogleController extends AuthController throw new \Exception("지원하지 않는 action입니다.({$action})"); // break; } + $this->service->getFormService()->setFormFields($fields); + $this->service->getFormService()->setFormRules($action, $fields); + $this->service->getFormService()->setFormFilters($filters); + $this->service->getFormService()->getFormOptions($filters); + $this->service->getFormService()->setBatchjobFilters($filters); + $this->addViewDatas('helper', $this->service->getHelper()); - $this->addViewDatas('formFields', $this->service->getFormService()->getFormFields($action, $fields)); - $this->addViewDatas('formFilters', $this->service->getFormService()->getFormFilters($action, $filters)); - $this->addViewDatas('formRules', $this->service->getFormService()->getFormRules($action, $fields)); - $this->addViewDatas('formOptions', $this->service->getFormService()->getFormOptions($action, $filters)); + $this->addViewDatas('formFields', $this->service->getFormService()->getFormFields()); + $this->addViewDatas('formRules', $this->service->getFormService()->getFormRules()); + $this->addViewDatas('formFilters', $this->service->getFormService()->getFormFilters()); + $this->addViewDatas('formOptions', $this->service->getFormService()->getFormOptions()); } public function login_form_process(): void { diff --git a/app/Controllers/Auth/LocalController.php b/app/Controllers/Auth/LocalController.php index 34ae40d..ed90203 100644 --- a/app/Controllers/Auth/LocalController.php +++ b/app/Controllers/Auth/LocalController.php @@ -37,15 +37,22 @@ class LocalController extends AuthController throw new \Exception("지원하지 않는 action입니다.({$action})"); // break; } + $this->service->getFormService()->setFormFields($fields); + $this->service->getFormService()->setFormRules($action, $fields); + $this->service->getFormService()->setFormFilters($filters); + $this->service->getFormService()->getFormOptions($filters); + $this->service->getFormService()->setBatchjobFilters($filters); + $this->addViewDatas('helper', $this->service->getHelper()); - $this->addViewDatas('formFields', $this->service->getFormService()->getFormFields($action, $fields)); - $this->addViewDatas('formFilters', $this->service->getFormService()->getFormFilters($action, $filters)); - $this->addViewDatas('formRules', $this->service->getFormService()->getFormRules($action, $fields)); - $this->addViewDatas('formOptions', $this->service->getFormService()->getFormOptions($action, $filters)); + $this->addViewDatas('formFields', $this->service->getFormService()->getFormFields()); + $this->addViewDatas('formRules', $this->service->getFormService()->getFormRules()); + $this->addViewDatas('formFilters', $this->service->getFormService()->getFormFilters()); + $this->addViewDatas('formOptions', $this->service->getFormService()->getFormOptions()); } //로그인처리 protected function login_process(): UserEntity { + $this->action_init_process('login'); $dto = new LocalDTO($this->request->getPost()); return $this->service->login($dto); } diff --git a/app/Forms/Auth/GoogleForm.php b/app/Forms/Auth/GoogleForm.php index a263ed1..4e6d430 100644 --- a/app/Forms/Auth/GoogleForm.php +++ b/app/Forms/Auth/GoogleForm.php @@ -11,16 +11,15 @@ class GoogleForm extends CommonForm parent::__construct(); } - public function getFormRule(string $action, string $field, array $rules = []): array + public function getFormRule(string $action, string $field): string { - $rules = parent::getFormRule($action, $field, $rules); switch ($field) { case "access_code": - $rules[$field] = "required|trim|string"; + $rule = "required|trim|string"; default: - $rules = parent::getFormRule($action, $field, $rules); + $rule = parent::getFormRule($action, $field); break; } - return $rules; + return $rule; } } diff --git a/app/Forms/Auth/LocalForm.php b/app/Forms/Auth/LocalForm.php index 536e3d4..fe44110 100644 --- a/app/Forms/Auth/LocalForm.php +++ b/app/Forms/Auth/LocalForm.php @@ -11,22 +11,20 @@ class LocalForm extends CommonForm parent::__construct(); } - public function getFormRule(string $action, string $field, array $rules = []): array + public function getFormRule(string $action, string $field): string { - $rules = parent::getFormRule($action, $field, $rules); switch ($field) { case "id": $rule = "required|trim|min_length[4]|max_length[20]"; $rule .= in_array($action, ["create", "create_form"]) ? "|is_unique[{$this->getAttribute('table')}.{$field}]" : ""; - $rules[$field] = $rule; break; case "passwd": - $rules[$field] = in_array($action, ["create", "create_form"]) ? "required|trim|string" : "permit_empty|trim|string"; + $rule = in_array($action, ["create", "create_form"]) ? "required|trim|string" : "permit_empty|trim|string"; break; default: - $rules = parent::getFormRule($action, $field, $rules); + $rule = parent::getFormRule($action, $field); break; } - return $rules; + return $rule; } } diff --git a/app/Forms/CollectorForm.php b/app/Forms/CollectorForm.php index 987b302..248b663 100644 --- a/app/Forms/CollectorForm.php +++ b/app/Forms/CollectorForm.php @@ -11,7 +11,7 @@ class CollectorForm extends CommonForm parent::__construct(); } - public function getFormRule(string $action, string $field, array $rules = []): array + public function getFormRule(string $action, string $field): string { switch ($field) { case "trafficinfo_uid": @@ -20,27 +20,26 @@ class CollectorForm extends CommonForm case "raw_in": case "raw_out": $rule = "required|trim|neumeric"; - $rules[$field] = $rule; break; default: - $rules = parent::getFormRule($action, $field, $rules); + $rule = parent::getFormRule($action, $field); break; } - return $rules; + return $rule; } - public function getFormOption(string $action, string $field, array $options = []): array + public function getFormOption(string $field, array $options = ['options' => [], 'extras' => [], 'atttributes' => []]): array { + $tempOptions = ['' => lang("{$this->getAttribute('class_path')}.label.{$field}") . " 선택"]; switch ($field) { case 'trafficinfo_uid': - $tempOptions = ['' => lang("{$this->getAttribute('class_path')}.label.{$field}") . " 선택"]; foreach (service('trafficservice')->getEntities() as $entity) { $tempOptions[$entity->getPK()] = $entity->getTitle(); } $options[$field]['options'] = $tempOptions; - $options[$field]['extras'] = ['class' => 'select-field']; + $options[$field]['extras'] = ['class' => 'form-control select-field']; break; default: - $options = parent::getFormOption($action, $field, $options); + $options = parent::getFormOption($field, $options); break; } return $options; diff --git a/app/Forms/CommonForm.php b/app/Forms/CommonForm.php index f09771d..5bf6fb1 100644 --- a/app/Forms/CommonForm.php +++ b/app/Forms/CommonForm.php @@ -8,6 +8,11 @@ use RuntimeException; abstract class CommonForm { private array $_attributes = []; + private array $_formFields = []; + private array $_formRules = []; + private array $_formFilters = []; + private array $_batchjobFilters = []; + private array $_formOptions = []; protected function __construct() {} final public function setAttributes(array $attributes): void { @@ -20,34 +25,73 @@ abstract class CommonForm } return $this->_attributes[$key]; } - final public function getFormFields(string $action, array $fields, $tempFormFields = []): array + final public function setFormFields(array $fields): void { foreach ($fields as $field) { - $tempFormFields = $this->getFormField($action, $field, $tempFormFields); + $this->_formFields[$field] = $this->getFormFieldLabel($field); } - return $tempFormFields; } - final public function getFormFilters(string $action, array $fields = []): array + //$fields 매치된것만 반환, []->전체 + final public function getFormFields(array $fields = []): array { - return $fields; + // 1. $fields 배열이 비어있는지 확인합니다. + // getFormFields('create') 와 같이 호출될 경우 $fields는 빈 배열[]이 됩니다. + if (empty($fields)) { + // 비어있다면, _formFields 전체를 반환합니다. + return $this->_formFields; + } + // $fields의 값(원하는 필드명)을 키로 변환합니다. + // 예: ['test1'] -> ['test1' => 0] + $fieldsAsKeys = array_flip($fields); + // _formFields와 $fieldsAsKeys 간의 키를 비교하여 교집합을 반환합니다. + // 즉, $fields에 지정된 필드 정의만 추출됩니다. + return array_intersect_key($this->_formFields, $fieldsAsKeys); } - final public function getFormRules(string $action, array $fields, array $rules = []): array + final public function setFormRules(string $action, array $fields): void { foreach ($fields as $field) { - $rules = $this->getFormRule($action, $field, $rules); + $this->_formRules[$field] = $this->getFormRule($action, $field); } - return $rules; } - final public function getFormOptions(string $action, array $fields, array $options = []): array + //$fields 매치된것만 반환, []->전체 + final public function getFormRules(array $fields = []): array + { + if (empty($fields)) { + return $this->_formRules; + } + $fieldsAsKeys = array_flip($fields); + return array_intersect_key($this->_formRules, $fieldsAsKeys); + } + final public function setFormOptions(array $fields): void { foreach ($fields as $field) { - $options = $this->getFormOption($action, $field, $options); + $this->_formOptions[$field] = $this->getFormOption($field); } - return $options; } - final public function getBatchjobFields(array $fields = []): array + //$fields 매치된것만 반환, []->전체 + final public function getFormOptions(array $fields = []): array { - return $fields; + if (empty($fields)) { + return $this->_formOptions; + } + $fieldsAsKeys = array_flip($fields); + return array_intersect_key($this->_formOptions, $fieldsAsKeys); + } + final public function setFormFilters(array $fields): void + { + $this->_formFilters = $fields; + } + final public function getFormFilters(): array + { + return $this->_formFilters; + } + final public function setBatchjobFilters(array $fields): void + { + $this->_batchjobFilters = $fields;; + } + final public function getBatchjobFilters(): array + { + return $this->_batchjobFilters; } final public function getBatchjobButtons(array $buttions = [ 'batchjob' => '일괄 처리', @@ -56,18 +100,36 @@ abstract class CommonForm { return $buttions; } + //Validation용 + public function validate(array $formDatas): bool + { + $validation = service('validation'); + $dynamicRules = []; + foreach ($this->getFormRules() as $field => $rule) { + //field별 추가 커스텀 룰 적용 + list($field, $rule) = $this->getValidationRule($field, $rule); + $dynamicRules[$field] = $rule; + } + $validation->setRules($dynamicRules); + return $validation->run($formDatas); + } //필수함수 //사용자정의 함수 - public function getFormField(string $action, string $field, array $tempFormFields = []): array + protected function getValidationRule(string $field, string $rule): array + { + return array($field, $rule); + } + + public function getFormFieldLabel(string $field, ?string $label = null): string { switch ($field) { default: - $tempFormFields[$field] = lang("{$this->getAttribute('class_path')}.label.{$field}"); + $label = $label ?? lang("{$this->getAttribute('class_path')}.label.{$field}"); break; } - return $tempFormFields; + return $label; } - public function getFormRule(string $action, string $field, array $rules = []): array + public function getFormRule(string $action, string $field): string { switch ($field) { case $this->getAttribute('pk_field'): @@ -77,57 +139,55 @@ abstract class CommonForm } else { $rule = "required|numeric"; } - $rules[$field] = $rule; break; case $this->getAttribute('title_field'): - $rules[$field] = "required|trim|string"; + $rule = "required|trim|string"; break; case "code": // a-zA-Z → 영문 대소문자,0-9 → 숫자,가-힣 → 한글 완성형,\- → 하이픈 $rule = "required|regex_match[/^[a-zA-Z0-9가-힣\-]+$/]|min_length[4]|max_length[20]"; $rule .= in_array($action, ["create"]) ? "|is_unique[{$this->getAttribute('table')}.{$field}]" : ""; - $rules[$field] = $rule; break; case 'picture': - $rules[$field] = "is_image[{$field}]|mime_in[{$field},image/jpg,image/jpeg,image/gif,image/png,image/webp]|max_size[{$field},300]|max_dims[{$field},2048,768]"; + $rule = "is_image[{$field}]|mime_in[{$field},image/jpg,image/jpeg,image/gif,image/png,image/webp]|max_size[{$field},300]|max_dims[{$field},2048,768]"; break; case "updated_at": case "created_at": case "deleted_at": - $rules[$field] = "permit_empty|valid_date"; + $rule = "permit_empty|valid_date"; break; default: - $rules[$field] = "permit_empty|trim|string"; + $rule = "permit_empty|trim|string"; break; } - return $rules; + return $rule; } - public function getFormOption(string $action, string $field, array $options = []): array + public function getFormOption(string $field, array $options = ['options' => [], 'extras' => [], 'atttributes' => []]): array { + $tempOptions = ['' => lang("{$this->getAttribute('class_path')}.label.{$field}") . " 선택"]; switch ($field) { case 'user_uid': - $tempOptions = ['' => lang("{$this->getAttribute('class_path')}.label.{$field}") . " 선택"]; foreach (service('userservice')->getEntities() as $entity) { $tempOptions[$entity->getPK()] = $entity->getTitle(); + // $options['attributes'][$entity->getPK()] = ['data-role' => implode(DEFAULTS['DELIMITER_ROLE'], $entity->getRole())]; } - $options[$field]['options'] = $tempOptions; - $options[$field]['extras'] = ['class' => 'select-field']; + $options['options'] = $tempOptions; + $options['extras'] = ['class' => 'form-control select-field']; break; case 'clientinfo_uid': - $tempOptions = ['' => lang("{$this->getAttribute('class_path')}.label.{$field}") . " 선택"]; foreach (service('clientervice')->getEntities() as $entity) { $tempOptions[$entity->getPK()] = $entity->getTitle(); + // $options['attributes'][$entity->getPK()] = ['data-role' => implode(DEFAULTS['DELIMITER_ROLE'], $entity->getRole())]; } - $options[$field]['options'] = $tempOptions; - $options[$field]['extras'] = ['class' => 'select-field']; + $options['options'] = $tempOptions; + $options['extras'] = ['class' => 'form-control select-field']; break; default: - $tempOptions = [ - '' => lang("{$this->getAttribute('class_path')}.label.{$field}") . " 선택", - ...lang($this->getAttribute('class_path') . "." . strtoupper($field)) - ]; - $options[$field]['options'] = $tempOptions; - $options[$field]['extras'] = []; + foreach (lang($this->getAttribute('class_path') . "." . strtoupper($field)) as $key => $label) { + $tempOptions[$key] = $label; + } + $options['options'] = $tempOptions; + $options['extras'] = ['class' => 'form-control']; break; } return $options; diff --git a/app/Forms/MylogForm.php b/app/Forms/MylogForm.php index 3264905..6f0c973 100644 --- a/app/Forms/MylogForm.php +++ b/app/Forms/MylogForm.php @@ -11,20 +11,19 @@ class MylogForm extends CommonForm parent::__construct(); } - public function getFormRule(string $action, string $field, array $rules = []): array + public function getFormRule(string $action, string $field): string { switch ($field) { case "title": $rule = "required|trime|string"; - $rules[$field] = $rule; break; case "content": - $rules[$field] = "permit_empty|trim|string"; + $rule = "permit_empty|trim|string"; break; default: - $rules = parent::getFormRule($action, $field, $rules); + $rule = parent::getFormRule($action, $field); break; } - return $rules; + return $rule; } } diff --git a/app/Forms/TrafficForm.php b/app/Forms/TrafficForm.php index 2baba9e..4019325 100644 --- a/app/Forms/TrafficForm.php +++ b/app/Forms/TrafficForm.php @@ -10,31 +10,27 @@ class TrafficForm extends CommonForm { parent::__construct(); } - public function getFormRule(string $action, string $field, array $rules = []): array + public function getFormRule(string $action, string $field): string { switch ($field) { case "client": case "switch": $rule = "required|trim|string"; $rule .= in_array($action, ["create", "create_form"]) ? "|is_unique[{$this->getAttribute('table')}.{$field}]" : ""; - $rules[$field] = $rule; break; case "ip": $rule = "required|trim|valid_ip[both]"; //ipv4 , ipv6 , both(ipv4,ipv6) - $rules[$field] = $rule; break; case "interface": $rule = "required|trim|string"; - $rules[$field] = $rule; break; case "status": $rule = "required|trim|string"; - $rules[$field] = $rule; break; default: - $rules = parent::getFormRule($action, $field, $rules); + $rule = parent::getFormRule($action, $field); break; } - return $rules; + return $rule; } } diff --git a/app/Forms/UserForm.php b/app/Forms/UserForm.php index c8af692..db62d7b 100644 --- a/app/Forms/UserForm.php +++ b/app/Forms/UserForm.php @@ -10,42 +10,51 @@ class UserForm extends CommonForm { parent::__construct(); } - - public function getFormField(string $action, string $field, array $tempFormFields = []): array + protected function getValidationRule(string $field, string $rule): array { switch ($field) { - default: - $tempFormFields = parent::getFormField($action, $field, $tempFormFields); + case 'role': + $field = "{$field}.*"; break; + default: + return parent::getValidationRule($field, $rule); + // break; } - return $tempFormFields; + return array($field, $rule); } - public function getFormRule(string $action, string $field, array $rules = []): array + // public function getFormFieldLabel(string $field, ?string $label = null): string + // { + // switch ($field) { + // default: + // $label = parent::getFormFieldLabel($field, $label); + // break; + // } + // return $label; + // } + public function getFormRule(string $action, string $field): string { switch ($field) { case "id": $rule = "required|trim|min_length[4]|max_length[20]"; $rule .= in_array($action, ["create", "create_form"]) ? "|is_unique[{$this->getAttribute('table')}.{$field}]" : ""; - $rules[$field] = $rule; break; case "passwd": - $rules[$field] = in_array($action, ["create", "create_form"]) ? "required" : "permit_empty" . "|trim|string"; + $rule = in_array($action, ["create", "create_form"]) ? "required" : "permit_empty" . "|trim|string"; break; case "confirmpassword": - $rules[$field] = in_array($action, ["create", "create_form"]) ? "required" : "permit_empty" . "|trim|string|matches[passwd]"; + $rule = in_array($action, ["create", "create_form"]) ? "required" : "permit_empty" . "|trim|string|matches[passwd]"; break; case "email": $rule = "required|trim|valid_email"; $rule .= in_array($action, ["create", "create_form"]) ? "|is_unique[{$this->getAttribute('table')}.{$field}]" : "" . "|trim|valid_email"; - $rules[$field] = $rule; break; case "role": - $rules[$field] = "required|trim|string"; + $rule = "required|trim|string"; break; default: - $rules = parent::getFormRule($action, $field, $rules); + $rule = parent::getFormRule($action, $field); break; } - return $rules; + return $rule; } } diff --git a/app/Helpers/CommonHelper.php b/app/Helpers/CommonHelper.php index 35a796f..b819fac 100644 --- a/app/Helpers/CommonHelper.php +++ b/app/Helpers/CommonHelper.php @@ -32,6 +32,54 @@ class CommonHelper } return $label; } + /** + * CI4의 form_dropdown()을 확장하여