content_title = lang("{$this->getService()->getClassName()}.title"); $this->class_path .= $this->getService()->getClassName(); $this->uri_path .= strtolower($this->getService()->getClassName('/')) . '/'; // $this->view_path .= strtolower($this->getService()->getClassName()) . DIRECTORY_SEPARATOR; } public function getService(): ClientService { if (!$this->_service) { $this->_service = new ClientService(); } return $this->_service; } public function getHelper(): ClientHelper { if (!$this->_helper) { $this->_helper = new ClientHelper(); } return $this->_helper; } //Index,FieldForm관련 //생성관련 protected function create_process(array $formDatas): void { // 관리자 UID는 현재 인증된 사용자로 설정 $formDatas['user_uid'] = $this->getMyAuth()->getUIDByAuthInfo(); parent::create_process($formDatas); } //수정관련 protected function modify_process(mixed $entity, array $formDatas): void { // 관리자 UID는 현재 인증된 사용자로 설정 $formDatas['user_uid'] = $this->getMyAuth()->getUIDByAuthInfo(); parent::modify_process($entity, $formDatas); } protected function setValidation(Validation $validation, string $field, string $rule): Validation { switch ($field) { case 'role': //아래 Rule Array는 필드명.* checkbox를 사용 $validation->setRule("{$field}.*", $field, $rule); break; default: $validation = parent::setValidation($validation, $field, $rule); break; } return $validation; } //Index,FieldForm관련. protected function setFilterConditionForList(): void { foreach ($this->getFilterFields() as $field) { $this->$field = $this->request->getVar($field); if ($this->$field !== null && $this->$field !== '') { if ($field === 'role') { $where = "FIND_IN_SET(" . $this->getService()->getModel()->escape($this->$field) . ", {$this->getService()->getModel()->getTable()}.{$field}) > 0"; //FIND_IN_SET()은 MySQL 함수이므로 CodeIgniter가 이를 일반 컬럼명으로 착각하고 escape하게 되면 오류가 발생합니다. 따라서 ->where($sql, null, false)로 명시하여 escape를 꺼줘야 정상 작동 $this->getService()->getModel()->where($where, null, false); } else { $this->getService()->getModel()->where("{$this->getService()->getModel()->getTable()}.{$field}", $this->$field); } } } } }