사용자 도구

사이트 도구


software:codeignter_tutorial

개요

  • CodeIgniter를 이용하여 간단하게 조회,입력,수정,삭제가 가능한 페이지를 만들어 보겠습니다. CodeIgniter에서 지원하는 MVC 패턴을 따르도록 하겠습니다.

설치

  • 설치 파일 다운로드 : CI는 현재(2011년 08월) V2.0.2 버전 까지 나와 있으며 http://codeigniter.com/downloads/ 사이트에서 다운로드 가능합니다. 이전 버전들도 다운 가능합니다.
  • CodeIgniter_2.0.2.zip 파일을 다운 받으셨으면 웹서버 저장 경로에 압축을 풀고 저장하시면 됩니다.
    • 코드이그나이터는 독립적이라 다른 프로그램 설치가 필요 없이 PHP 웹서버 안에 압축을 풀어 주시면 됩니다.
  • 제대로 설치 하시고 웹에 접을 했을 때 아래와 같은 화면이 뜹니다.

설정

  • 아래 설정 중 필 수 적인 것은 없습니다. 상황과 편의를 위해서 한 것이기 때문에 자신에게 맞게 더 설정하거나 변경하셔야 합니다.

DATABASE 설정

  • database.php 파일을 설정합니다.
    • application\config 폴더 안에 있습니다.
    • $db['default']['hostname'] = 'localhost';
      • hostname을 입력합니다. 웹서버와 DB가 같은 서버에 있으면 localhost를 입력합니다.
    • $db['default']['username'] = 'bearcho';
      • DB 계정 명을 입력합니다.
    • $db['default']['password'] = 'password';
      • DB 계정 암호를 입력합니다.
    • $db['default']['database'] = 'bearchodb';
      • 사용되는 database를 입력합니다.
    • $db['default']['dbdriver'] = 'mysql';
      • DB driver를 선택합니다.
    • $db['default']['char_set'] = 'utf8';
      • DB 케릭터셋을 선택합니다.
    • $db['default']['dbcollat'] = 'utf8_general_ci';
      • DB 콜레션을 선택합니다.

AUTOLOAD 설정

  • autoload.php 파일은 application\config 있습니다.
  • $autoload['libraries'] = array() 를 $autoload['libraries'] = array('database') 로 바꿔 줍니다.
  • 위와 같이 설정을 하게 되면 페이지 마다 db connection을 할 필요가 없이 자동으로 연결이 됩니다.

CONFIG 설정

  • config.php 파일은 application/config 있습니다.
  • $config['index_page'] = 'index.php' 를 $config['index_page'] = 로 바꾸어 줍니다. * 위 index_page 설정은 controller가 페이지 이동할 때도 컨트롤러 앞에 자동으로 index.php 페이지를 붙여 준다는 것입니다. * 주소창에 index.php 항상보이면 보기 안좋기 때문에 뺍니다. 대신 .htaccess로 index.php 를 주소창에 보이지 않지만 가장 먼저 접근 하는 페이지로 설정 할 겁니다. ===== INDEX 설정 ===== * index.php 파일은 웹서버 가장 상위에 있습니다. * INDEX 파일은 CodeIgniter의 동작 중 가장 기초인 routing을 합니다. * $routing['controller'] = 를 $routing['controller'] = 'blog' 로 변경합니다.
    • 위에 작업은 index.php 페이지가 가장 먼저 routing 할 컨트롤러를 선택하는 설정입니다.

.htaccess 설정

  • .htaccess 파일을 상위에 생성 해줍니다.
  • rewriteEngine on
  • RewriteCond $1 !^(index\.php|images|robots\.txt)
  • RewriteRule ^(.*)$ /index.php/$1 [L]
  • 위 내용을 쓰고 저장합니다. 위 설정은 주소로 접을 했을 때 가장 먼저 index.php 파일을 읽는 다는 것이고 주소창에는 index.php가 보이지 않습니다.
  • config 설정과 .htaccess 설정은 주소창을 깔끔하게 보이기 위한 것이지 꼭 필요한 설정은 아닙니다.

활용

테스트에서 DB는 Mysql을 사용했고 test란 테이블을 하나 만들었습니다. 테이블에 Id int(11)autoincrease, title varchar(255), contents text란 컬럼이있습니다. 이제 test 테이블에 데이터를 쓰고, 읽고 , 수정, 삭제 하는 간단한 프로그램을 만들어 보도록 하겠습니다.

단계1

  • blog.php 를 application\controllers 에 생성하고 아래와 같은 소스를 넣습니다.

class Blog extends CI_Controller {

public function index()
{
	echo "hello codeigniter";
}

}

  • 그렇게 작성하고 웹페이지 접근하면 아래와 같은 페이지가 나옵니다. (ex: http://127.0.0.1)

  • 위는 컨트롤러를 설정한 것으로 index()는 기본적으로 가장 먼저 실행되는 함수 입니다.
  • 이제 컨트롤러 안에 아래와 같은 내용을 삽입합니다.

<? 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();
	}    
	    

} ?>

단계2

컨트롤러에서 호출했던 모델을 만들어 보겠습니다. 모델은 내부적으로 돌아 가는 비지니스 로직 또는 데이터 입력,수정,삭제,조회 같은 기능을 합니다.

  • 모델 이름은 test라고 하겠습니다. application/models 폴더에 test.php 란 파일을 생성합니다.

<? 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/');
} 

} ?>

단계3

View 를 만들어 보겠습니다. View는 클라이언트에게 보여지는 화면입니다. 이번 sample에는 View는 main, update, write 페이지로 나뉩니다. View 파일은 전부 apllication/Views 폴더에 넣어 주시면 됩니다.

main.php

  • main 페이지 소스 입니다. main 페이지는 가장 먼저 화면에 보여지는 부분으로 데이터를 보여주고 입력, 수정, 삭제를 할 수 있습니다. <html> 테그가 빠져있습니다. 참고 하십시요.

<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>

write.php

  • write.php는 데이터를 입력하는 view 입니다. <html> 태그가 빠져있습니다.

<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>

update.php

  • update View는 데이터를 udate 할 때 사용하는 view 입니다. write.php 와 거의 동일합니다. <html> 태그가 빠져 있습니다.

<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>

단계4

  • main.php 화면입니다.

  • write.php 화면입니다.

  • update.php 화면입니다.

software/codeignter_tutorial.txt · 마지막으로 수정됨: 2011/08/17 14:54 저자 sivanim