로 바꾸어 줍니다.
* 위 index_page 설정은 controller가 페이지 이동할 때도 컨트롤러 앞에 자동으로 index.php 페이지를 붙여 준다는 것입니다.
* 주소창에 index.php 항상보이면 보기 안좋기 때문에 뺍니다. 대신 .htaccess로 index.php 를 주소창에 보이지 않지만 가장 먼저 접근 하는 페이지로 설정 할 겁니다.
===== INDEX 설정 =====
* index.php 파일은 웹서버 가장 상위에 있습니다.
* INDEX 파일은 CodeIgniter의 동작 중 가장 기초인 routing을 합니다.
* $routing['controller'] =
를 $routing['controller'] = 'blog' 로 변경합니다.테스트에서 DB는 Mysql을 사용했고 test란 테이블을 하나 만들었습니다. 테이블에 Id int(11)autoincrease, title varchar(255), contents text란 컬럼이있습니다. 이제 test 테이블에 데이터를 쓰고, 읽고 , 수정, 삭제 하는 간단한 프로그램을 만들어 보도록 하겠습니다.
class Blog extends CI_Controller {
public function index() { echo "hello codeigniter"; }
}
<? class Blog extends CI_Controller {
/*생성자 입니다. CI 컨트롤러가 실행될때 가정 먼저 실행됩니다.*/ public function __construct() { parent::__construct(); /*url helper 입니다. anchor 같은 함수를 사용할 때 사용합니다.*/ $this->load->helper('url'); /*url helper 입니다. form기능을 좀더 쉽게 만들어 줍니다.*/ $this->load->helper('form');
} /*index 메소드 입니다. 특정 메소드가 없으면 호출되는 함수 입니다.*/ public function index() { /* models 폴더에서 test.php 모델을 호출합니다. */ $this->load->model('test'); /* data 배열의 query란 이름으로 test 모델에서 가져온 엔트리 값을 넣어 줍니다*/ $data['query'] = $this->test->all_entries(); /*main이라는 뷰 즉 main.php를 views 폴더에서 호출합니다. $data 배열도 같이 보냅니다.*/ $this->load->view('main',$data); } /* wirte 메소드 입니다. write 메소드는 글을 입력 할때 사용하는 메소드입니다.*/ public function write() { /*views 폴더에 write.php 페이지를 호출합니다.*/ $this->load->view('write'); } /* update 입니다. 글을 수정을 할때 사용하는 페이지 입니다.*/ public function update() { /* get_where 함수와 3번째 세그번트 값을 이용하여 test 테이블의 특정 id 데이터만 가지고 옵니다. 간단한 데이터를 위처럼 모델을 사용하지 않고 바로 호출하는게 더 간단 할 수 있습니다.*/ $data['query'] = $this->db->get_where('test',array('id' => $this->uri->segment(3))); /* views 폴더의 update.php 파일을 호출합니다. */ $this->load->view('update',$data); } /* delete 입니다. 특정 id 번호를 삭제 합니다.*/ public function delete() { /*실제로 파일을 삭제 하는 부분입니다. delete를 이용하여 3번째 세그번트의 id 값을 삭제 합니다.*/ $this->db->delete('test',array('id' => $this->uri->segment(3))); /*삭제 후에 자동으로 가는 페이지 입니다.*/ redirect('blog/index/'); } /* 글을 쓴 data를 insert합니다. write.php 에서 데이터를 보내면 데이터를 입력합니다.*/ public function data_insert() { /* models 폴더에서 test.php 모델을 호출합니다. */ $this->load->model('test'); /* test 모델을 insert_entry() 메소드를 실행합니다. */ $this->test->insert_entry(); } /* data를 update합니다. write.php 에서 데이터를 보내면 데이터를 입력합니다.*/ public function data_update() { /* models 폴더에서 test.php 모델을 호출합니다. */ $this->load->model('test'); /* update_entry 메소드를 호출합니다. */ $this->test->update_entry(); }
} ?>
컨트롤러에서 호출했던 모델을 만들어 보겠습니다. 모델은 내부적으로 돌아 가는 비지니스 로직 또는 데이터 입력,수정,삭제,조회 같은 기능을 합니다.
<? class test extends CI_Model {
/*전역 변수 입니다. 주로 컬럼 값을 미리 정해 놓고 사용할 때 전역 변수로 사용합니다. 하지만 전역 변수를 사용하게 되면 메소드 마다 사용되는 컬럼 값이 틀려 질 때 오류가 날 수 있으니깐 조심해서 사용해야 합니다.*/ var $title = ''; var $contents = ''; /* 생성자 입니다.*/ function __construct() { parent::__construct(); } /* test 테이블의 모든 데이터를 가지고 오는 메소드 입니다.*/ function all_entries() { /*test 테이블의 데이터를 가지고 옵니다. */ $query = $this->db->get('test'); return $query; } /* data를 insert 하는 함수 입니다. 특정 sql을 이용하지 않고 CI에서 제공하는 insert 함수를 사용합니다. 배열안의 데이터 이름과 컬럼 명이 같으면 자동으로 insert 됩니다.*/ function insert_entry() { /*이렇게 직접 컬럼 값을 $_POST를 이용하여 설정 하셔도 되고 아니면 아래 사용한 것 처럼 $_POST로 바로 데이터를 보내셔도 됩니다. 아래와 같이 사용할 경우 form안에 엘레먼트 id 가 db 필드 명과 같아야 합니다.*/ //$this->title = $_POST['title']; //$this->contents = $_POST['contents'];
/*post로 받은 폼 값을 바로 넘기겠습니다.*/ $this->db->insert('test', $_POST); /* redirect로 index페이지로 넘어 갑니다.*/ redirect('blog/index/'); } /* data를 update 하는 메소드 입니다.*/ function update_entry() { /*전역 변수로 선언한 변수에 post 넘어온 데이터를 넣습니다.*/ $this->title = $_POST['title']; $this->contents = $_POST['contents']; /* 3번째 세그먼트(세그먼트는 주소 창에 /로 구분되어 있는 데이터 입니다.) ID를 기준하여 update 합니다.*/ $this->db->update('test', $_POST, array('Id' => $_POST['Id'])); redirect('blog/index/'); } /* 데이터를 delete 하는 메소드 입니다. 사용되지는 않습니다. 간단하기에 controller에 바로 넣었습니다.*/ function delete_entry() { $this->db->delete('mytable', array('Id' => $Id)); redirect('blog/index/'); }
} ?>
View 를 만들어 보겠습니다. View는 클라이언트에게 보여지는 화면입니다. 이번 sample에는 View는 main, update, write 페이지로 나뉩니다. View 파일은 전부 apllication/Views 폴더에 넣어 주시면 됩니다.
<head> <title> tea-gyu </title>
<meta charset="utf-8">
</head> <body>
<table width="800" height="400" border="1"> <tr> <td>
<? /* $query에 각 row별 result 값을 받아서 item 배열에 넣습니다. row가 없을 때 까지 진행 됩니다.*/ foreach($query→result() as $item){ ?> <!– title 값을 출력 합니다.–> <h3><?=$item→title?></h3> <!– contents 값을 출력 합니다.–> <p><?=$item→contents?></p> <hr/>
<!– anchor 함수는 페이지 링크를 쉽게 해주는 uri 핼퍼의 함수입니다.–> <?=anchor('blog/update/'.$item→Id,'수정')?> <?=anchor('blog/delete/'.$item→Id,'삭제')?> <hr/>
<?}?>
<?=anchor('blog/write','데이터 쓰기')?>
</td> </tr>
</body>
<head> <title> tea-gyu </title>
<meta charset="utf-8">
</head> <body>
<!-- form 핼퍼를 사용한 form_open 입니다. form 설정을 쉽게 해줍니다.--> <?=form_open('blog/data_insert')?> <input type = "text" name = "title"></input> <br/> <textarea name="contents"></textarea> <br/> <input type= "submit" value="input" /> <?=anchor('blog/index','main')?> </form>
</body>
<head> <title> tea-gyu </title>
<meta charset="utf-8">
</head> <body>
<? if ($query->num_rows() > 0) { $item = $query->row(); } ?>
<?=form_open('blog/data_update')?> <?=form_hidden('Id',$this->uri->segment(3))?> <input type = "text" name = "title" value="<?=$item->title?>"></input> <br/> <textarea name="contents" ><?=$item->contents?></textarea> <br/> <input type= "submit" value="update" /> </form>
</body>