CI 코드

제목 모델코드 생성기
글쓴이 한대승(불의회상) 작성시각 2011/10/13 20:59:39
댓글 : 27 추천 : 1 스크랩 : 0 조회수 : 16796   RSS
한대승(불의회상)
CI를 이용하여 홈페이지 리뉴얼 준비중 입니다.
 
지난번 웅파님과 정모때 잠깐 이야기 했었는데 테이블이 많아서 일일이 모델 만들기가 귀찮아 간단한 프로그램을 짜서 하신다고 하더군요.
 
리뉴얼을 준비하며 MVC를 적용 시키려니....
모델 코딩하는게 반복 작업에 귀차니즘 그 자체 더군요.
 
그래서 웅파님의 아이디어에 착안하여 기본적인 모델코드를 생성해주는 프로그램을 짜봤습니다.
 
최근에 개념만 잡고 실천에 못옮긴 TDD를 해보려고 공부하고 있는데 모델 코드 만들면서 테스트가 가능하도록 테스트 코드도 작성 하도록 해 봤습니다.
 
분명 누군가 더 조은 프로그램을 만들었을것 같은데... 찾기가 힘들군요.
혹시 비슷한 프로그램 보신것 있으시면 알려주세요.
 
아직 완성이 안됐습니다만 참고 하시라고 올려 봅니당.. ^^

다운로드 받아서 열어 보시고 주석 한 줄 없다고 너무 뭐라 하지 마세요 ^^
어느정도 마무리 되면 메뉴얼도 작성해 볼까 생각중입니다.

설치는 별거 없습니다.

다운 받으시고 압축푼다음 내용 보시고 application에 집어 넣으시면 됩니다.

좋은 아이디어나 버그관려 제보해 주시면 적극 반영 하겠습니다.
참고로 리뉴얼 하는 홈피가 CI 1.7.3을 쓰고 있어서 그쪽에서는 제대로 테스트 했습니다만...
CI 2.0.3은 메뉴얼 보고 바뀐점만 살짝 수정하고 테스트는 안해서 에러가 속출 할 지도 모릅니다.

생성된 코드는 다운 받은후 controler 와 model쪽에 각각 넣어 주시면 됩니다.
코드가 원활이 동작하는지 테스트 해보시려면 테스트 프로그램 돌려 보시면 됩니다.

primary key는 Table에 정수로 설정되었다는 가정하에 작성 했습니다만....
문자열이어도 잘 동작 하리라 생각 합니다.

※추신
뷰가 참 심플 합니다.
뷰 작업해 주시면 적극 반영 하겠습니다. ^^^

 
테스트 URL : http://www.hoksi.wo.tc/code_gen

-:-:-:- 수정사항 -:-:-:-
* 모델코드 생성 부분 

1.  페이징을 위한 limit 추가  
2. 검색을 위한 find 함수 추가
3. 중복되는 get_value 함수 삭제

* 테스트코드 생성 부분
1. get_value 함수 테스트 부분 삭제

-:-:-:- 수정 사항 -:-:-:-

* 테스트 코드 생성부분
1. insert와 edit 부분 로직 수정

* VIew
1. jquery-ui 적용 인터페이스 개선

-:-:-:- 수정사항 -:-:-:-

* 모델코드 생성 부분
1. find 함수 실행시 1 row 만 반환하는 에러 수정

-:-:-:- 수정사항 -:-:-:-

* 컨트롤러 부분
1. $tbl 변수 초기화

첨부파일 code_gen.zip (11.9 KB)
 다음글 코드 이그나이터를 접하고 처음으로 만들어본 객체 입니다... (7)
 이전글 ci memo + tank_auth (2)

댓글

무명의시인2 / 2011/10/14 09:06:59 / 추천 0
불의회상님//

우오~~~~~~

공개하셨네요.

시간을 보니....오전 6시12분....덜덜;

정말 일찍 일어나신건가요? ㅎㅎ

한대승(불의회상) / 2011/10/14 09:17:25 / 추천 0
무명의시인// 점점 잠이 없어지는듯.... 노화현상인가?? ㅋㅋㅋㅋ 
무명의시인2 / 2011/10/14 09:20:00 / 추천 0
불의회상 님 //

ㅋㅋㅋㅋ

설마!!!
도라에몽 / 2011/10/14 10:28:07 / 추천 0
오.... 멋지네요.... 한번 사용해봐야겠어요. ^^
UYEONG / 2011/10/14 10:36:03 / 추천 0
우와 ㅎㅎ
변종원(웅파) / 2011/10/14 11:34:45 / 추천 0
불의회상/ 저 악덕PM 아닙니다. 악덕 "고문"입니다. ㅋㅋ
한대승(불의회상) / 2011/10/14 11:45:41 / 추천 0
ㅋㅋㅋㅋ
들국화 / 2011/10/19 09:45:28 / 추천 0
phpclasses 에서 비슷한걸 하나 받아서 프레임워크에 달아서 잠깐 썻었는데... ^^
오.. 파일 다운로드도 되고 좋네요...
탱크 / 2011/10/20 12:47:08 / 추천 0
 으허헉...
너무 멋지십니다.

흠냐... 생각보다 훨씬 멋지네요.

예전에 어디서나 쓸려고 javascript로 만들었던적은 있었는데 ㅋ
이 정도 수준은 아니었어요. 
걍 java에서 사용할려고, 멤버변수와 CRUD의 기본만 만드는 정도였는데...

후아후아~~~
불상님 정말 짱이신 듯...
역시 불의회"장"님 자격이 충분하십니다. ^^

박순철 / 2011/11/02 16:42:10 / 추천 0
 오... 이런것도 있네요..

디비에 데이타만 있고 코딩 해야하는것이 있었는데 

이걸로 한번 해 봐야겠습니다.

올려주셔서 감사합니다 (__)
세콩 / 2012/07/22 18:04:31 / 추천 0
 CI_2.1.2 버전에서 get_table_count() 에서 에러를 발견하였어요
제가 잘못 사용한 것인지.. 핰핰;;

기존소스입니다.

 function get_team_count($where = NULL)
 {
  $ret = -1;

  if($where !== NULL) {
   $this->db->where($where);
  }

  $res = $this->db->count_all_results('team');
  $ret = isset($res['numrows']) ? $res['numrows'] : $ret;

  return $ret;
 }


아래와 같이 수정하였습니다.
 function get_team_count($where = NULL)
 {
  if($where !== NULL) {
   $this->db->where($where);
  }

  return $this->db->count_all_results('team');
 }


milosz / 2012/12/20 20:29:34 / 추천 0
codegen 사용하고 나서 지운 후에 또 필요해서 복사하려고 보면 수정해야 하는 부분이 산재해 있어
조금 불편하더라구요. 그래서 tank_auth 처럼 변수로 몰아 놓았습니다. /ㅅ/

view/model_code.php 저장하시면 됩니다..
class <?php echo $Tbl?>_model extends CI_Model
{
    
    function __construct()
    {
        parent::__construct();
        
        $this->load->database();
        $this->table_name = '<?php echo $tbl;?>';
        $this->primary_key = '<?php echo $tbl;?>';
    }
    
 function find_<?php echo $tbl?>($where = NULL, $select = '*', $limit = 1000)
 {
  $this->db->select($select);
  $this->db->from($this->table_name);
  if($where !== NULL) $this->db->where($where);
  if($limit !== NULL) $this->db->limit($limit);
  $rs = $this->db->get();

  return $rs->result_array();
 }

 function get_<?php echo $tbl?>($id = NULL, $select = '*', $limit = NULL)
 {
    $ret = NULL;

  if($id !== NULL) {
   $ret = $this->find_<?php echo $tbl?>(array($this->primary_key => $id), $select, $limit);
  }

  return $ret;
 }

 function get_<?php echo $tbl?>_count($where = NULL)
 {
  if($where !== NULL) {
   $this->db->where($where);
  }

  return $this->db->count_all_results($this->table_name);
 }

 function add_<?php echo $tbl?>($row = NULL)
 {
  $ret = FALSE;

  if($row !== NULL && is_array($row) && !empty($row)) {
   // $row['created'] = date('Y-m-d H:i:s');

   $this->db->insert($this->table_name, $row);

   $ret = TRUE;
  }

  return $ret;
 }

 function edit_<?php echo $tbl?>($id = NULL, $row = NULL)
 {
  $ret = FALSE;

  if($id !== NULL && $row !== NULL && is_array($row) && !empty($row) &&
     $this->get_<?php echo $tbl?>_count(array($this->primary_key => $id)) == 1
  ) {
   // $row['updated'] = date('Y-m-d H:i:s');

   $this->db->where($this->primary_key, $id);
   $this->db->update($this->table_name, $row);

   $ret = TRUE;
  }

  return $ret;
 }

 function delete_<?php echo $tbl?>($id = NULL)
 {
   $ret = FALSE;

  if($id !== NULL) {
   $this->db->where($this->primary_key, $id);
   $this->db->delete($this->table_name);

   $ret = TRUE;
  }

  return $ret;
 }
}
/* End of file <?php echo $tbl?>_model.php */
/* Create By CodeIgniter Korea Forum (hoksi-ºÒÀÇȸ»ó) */