티스토리 뷰

[1부]에 이어서 시작합니다.

4. CI 경로 설정하기.

CI를 시작하기 위해서는 기본 경로를 설정해 줘야 합니다.
system/application/config/config.php 파일을 열어서... 'base_url'을 아래와 같이 수정해 줍니다.

$config['base_url'] = "http://localhost/ci/";

정상적으로 설치가 되었으면 아래와 같이 나옵니다.





5. MySQL 연결 설정하기.


데이터 베이스의 연결이 설정 되어 있는데로 설정르 합니다.
파일은 system/application/config/database.php 입니다.
이번 포스팅에서 사용할 db는 helloworld이고 사용자아이디와 암호는 "root"로 했습니다.

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "root";
$db['default']['database'] = "helloworld";
$db['default']['dbdriver'] = "mysql";

이제는 어플리케이션을 시작하면 항상 DB를 연결하도록 설정을 해 보겠습니다. system/application/config/autoload.php 파일을 열어서 보시면, $autoload['libraries']에 array('')가 비어 있습니다. 거기에 아래와 같이 database를 추가해 주세요.

$autoload['libraries'] = array('database');

먼저 MySQL에서 helloworld라는 데이터베이스를 생성합니다. 그리고 데이터 베이스가 비어 있으면 허전하죠? 데이터베이스를 채워 보겠습니다. 아래의 쿼리를 실행해서 데이터 베이스를 입력합니다.

CREATE TABLE `data`
  `id` int(11) NOT NULL auto_increment,
  `title` varchar(255) NOT NULL,
  `text` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

INSERT INTO `data` (`title`, `text`) VALUES('Hello World!', 'CodeIgniter is a powerful PHP framework with a very small footprint, built for PHP coders who need a simple and elegant toolkit to create full-featured web applications. If you''re a developer who lives in the real world of shared hosting accounts and clients with deadlines, and if you''re tired of ponderously large and thoroughly undocumented frameworks');


6. CI Controller 만들기.


처음에 사용할 Controller를 지정해 줘야 합니다.
다시 system/application/config/routes.php 파일을 엽니다. 여기 기본값은 welcome이라도 되어 있을 겁니다. 이걸 helloworld로 변경합니다.

$route['default_controller'] = "helloworld";

위와 같이 설정을 해 주시면, 기본 컨트롤러가 기존의 system/application/controllers/welcome.php파일이 아닌 system/application/controllers/helloworld.php 파일을 읽게 됩니다. 그럼 이제, system/application/controllers/helloworld.php 파일을 만들고, 아래와 같이 입력해 주세요.

<?php
    class Helloworld extends Controller{
        function index()
        {
            $this->load->model('helloworld_model');

            $data['result'] = $this->helloworld_model->getData();
            $data['page_title'] = "CI Hello World App!";

            $this->load->view('helloworld_view',$data);
        }
    }
?>

여기서 주의점은 클래스의 이름의 첫 글자는 대문자로 해야 합니다.

이전 개념도 그림에서 설명들였듯이 index.php에서는 이 controller 페이지를 거쳐서 model과 view를 연결합니다.
$this->load->model('helloworld_model')을 불러서 db의 데이터를 제어하고, 마지막은 $this->load->view('helloworld_view', $data)를 통해서 view에 있는 html과 데이터을 출력해 주는 형식입니다.


7. CI Model 만들기


여기서는 database를 연결해서 데이터를 읽어 오는 클래스 입니다. 여기서는 액티브 레코드(Active Record Class)를 이용해서 제어를 해 보겠습니다. 먼저 system/application/models 디렉토리에 helloworld_model.php 파일을 만듭니다. 그리고 아래와 같은 코드를 입력해 줍니다.

<?php
class Helloworld_model extends Model {

    function Helloworld_model()
    {
        // 모델 생성자 호출
        parent::Model();
    }
    
    function getData()
    {
        // data테이블의 모든 레코드를 불러 옴.
        $query = $this->db->get('data');
        
        if ($query->num_rows() > 0)
        {
            return $query->result();
        }else{
            show_error('Database is empty!');
        }
    }
}
?>

위 코드는 data 테이블의 모든 데이터를 블러와서 리턴하는 코드 입니다. 이전 챕터의 controller를 getData의 리턴값으로 이 데이터베이스의 결과 값을 받게 됩니다.


8. View 만들기


이제는 이 결과 값을 보여줄 페이지를 제작합니다. system/application/views 폴더에 helloworld_view.php 파일을 만들어 줍니다. 그리고 아래와 같은 내용을 넣습니다.

<html>
    <head>
        <title><?=$page_title?></title>
    </head>
    <body>
        <?php foreach($result as $row):?>
        <h3><?=$row->title?></h3>
        <p><?=$row->text?></p>
        <br />
        <?php endforeach;?>
    </body>
</html>

여기서는 foreach문으로 돌면서 data 테이블에 있는 내용을 출력해 줍니다. 지금은 1개 밖에 들어 있지 않아서 1개만 출력 되는데.. 추가로 입력이 되어 있으면 더 많은 데이터를 출력 합니다.
view는 기본적으로 controller에서 보내 준 값을 출력만 하는 형태라고 생각하시면 됩니다. 물론 php코딩도 할 수 있지만, 기본적인 출력만을 제작하는 것을 권장한다고 합니다.


9. 보기 좋은 주소로 만들어 주기


그러면 주소는 어떻게 될까요?
http://localhost/ci/index.php/helloworld
이런 주소 입니다.
지금은 기본 route를 helloworld.php로 해 뒀으니까.
http://localhost/ci/
이렇게만 하면 helloworld.php의 화면을 볼 수 있습니다. 그러면 초기에 있던 welcome.php를 보고 싶으면 어떻게 해야 할까요?
http://localhost/ci/index.php/welcome
이렇게 하시면 됩니다. 그런데.. index.php가 영 걸리죠? 그럼 이걸 과감하게 없애 보겠습니다.

먼저 appache에 rewrite 엔진이 설정 되어 있어야 합니다. 그럼, CI가 설치된 폴더에 .htaccess 파일을 만들고 아래와 같은 내용을 입력해 줍니다.

RewriteEngine on
RewriteCond $1 !^(index\.php|/img|/js|/css|/robots\.txt|/favicon\.ico)
RewriteRule ^(.*)$ /ci/index.php/$1 [L]

그리고 system/application/config/config.php 파일에 index_page의 설정 값을 지워 줍니다.

$config['index_page'] = '';

이렇게 해 주면.
https://localhost/ci/helloworld



index.php를 중간에 넣지 않고도 원하는 페이지를 부를 수 있습니다.


10. 예제 파일 및 마무리

ci.zip


위 예제 파일 소스 입니다. CI를 다운 받으신 후 덮어서 쓰기 해서 사용하시면 됩니다.
DB에 데이터를 입력하고, DB의 설정 만 바꾸시면 동작을 바로 동작 할 껍니다.

이 외에도 CodeIgniter의 소스가 많이 공개 되어 있습니다.


앞으로 CodeIgniter가 많이 보급 되어서, PHP Framework에서 확고한 자리를 차지 했으면 좋겠네요.
그럼 이쯤으로 마무리 할랍니다~ ^^*

좋은 하루 되세요~


댓글
  • 프로필사진 웅파 안녕하세요. 저는 CodeIgniter 한국사용자포럼 운영진 웅파라고 합니다.
    CodeIgniter 입문 잘 정리하셨네요.
    괜찮으시다면 http://www.codeigniter-kr.org/lecture/lists/page/1 게시판에 소개를 할까 하는데
    어떠신지요? 힘드시다면 링크로라도 CI 입문하시는 분께 소개를 해드리고 싶습니다.
    2009.07.20 22:03
  • 프로필사진 신규하 안녕하세요..
    안 그래도 오늘 포럼에 가입 했습니다 ^^;
    저두 열심히 활동해 보고 싶은데..
    아직 공부 중이라서...
    제 부족한 글을 소개해 주신다면 저야 말로 감사합니다.
    2009.07.20 22:09 신고
  • 프로필사진 웅파 소스 플러그인때문에 제대로 안나와서
    링크로 올려놨습니다. ^^

    http://www.codeigniter-kr.org/lecture/view/3/page/1/
    2009.07.21 12:56
  • 프로필사진 비밀댓글입니다 2009.12.10 15:57
  • 프로필사진 신규하 어디 블로그로 퍼 가셨는지도 남겨 주시면 좋았을 텐데요. ^^; 2009.12.09 00:33 신고
  • 프로필사진 pam 간단하고 유용한 가이드네요. 감사히 잘 봤습니다 :D 2010.11.04 19:53
  • 프로필사진 신규하 감사합니다. 2010.11.10 14:07 신고
  • 프로필사진 초보 따라했는데 view에서 화면이 깨져서 찾다보니 메뉴얼에 echo 가 있어서
    <?php echo $page_title;?>
    식으로 바꾸니 출력되더군요. 버전차이인가요.
    2010.11.10 11:44
  • 프로필사진 신규하 codeigniter의 버전 차이가 아니라..
    php의 버전에 따라서 "<?="를 사용 하실 수 없을 수 있습니다.
    설정을 검토해 보세요.
    2010.11.10 14:06 신고
  • 프로필사진 김경훈 우와.. 다른 글들은 초보자가 이해하기에는 좀 어려웠는데
    이글의 "보기 좋은 주소로 만들어 주기" 보고 한번에 이해가 갔습니다^^
    좋은글 감사합니다~
    2011.11.01 10:24
  • 프로필사진 NDH mysql 쿼리문에 ( 하나 빠졌네요.
    그대로 붙이니까 에러가;;

    CREATE TABLE `data` (
    `id` int( 11 ) NOT NULL AUTO_INCREMENT ,
    `title` varchar( 255 ) NOT NULL ,
    `text` text NOT NULL ,
    PRIMARY KEY ( `id` ) ) ENGINE = InnoDB DEFAULT CHARSET = utf8 AUTO_INCREMENT =1;# 결과값이 없습니다. (빈 레코드 리턴.)
    INSERT INTO `data` ( `title` , `text` )
    VALUES (
    'Hello World!', 'CodeIgniter is a powerful PHP framework with a very small footprint, built for PHP coders who need a simple and elegant toolkit to create full-featured web applications. If you''re a developer who lives in the real world of shared hosting accounts and clients with deadlines, and if you''re tired of ponderously large and thoroughly undocumented frameworks'
    );

    그리고 중간에 helloworld.php 만들 때 <br> 이..

    전체적으로 좀 오래된 자료인듯.. 클래스명도 틀리고, 경로도 틀리고...

    참고용으로 쓰겠습니다 ^^;;
    2011.11.16 15:00
  • 프로필사진 신규하 글이 오래 되서.. 최신 버전과는 약간 다르네요..
    최신 버전용으로 갱신 할 기회가 있으면 갱신해 보겠습니다.
    2012.01.05 13:01 신고
  • 프로필사진 나그네 굉장히 정리 잘해 놓으셨네요 좋은 자료 감사합니다~ 2012.01.04 15:17
  • 프로필사진 신규하 감사합니다. 2012.01.05 13:00 신고
  • 프로필사진 dacr HTTP 500 오류가 나는데요. 왜 그럴까요 ㅜㅜ
    물론 로컬호스트입니다. 맥환경에서 하고요.
    2012.07.18 01:14
  • 프로필사진 신규하 php.ini를 수정해서 메시지 출력을 좀 더 자세하게 나오게 해서 디버깅 해 보세요.
    500번 오류 만으로는 뭐라고 말씀 드리기 힘드네요.
    2012.07.20 18:17 신고
  • 프로필사진 oyster 오!! 너무 감사합니다.
    복많이 받으실거에요~~ㅋ
    2013.01.16 18:41
  • 프로필사진 신규하 오래 된 글이지만 도움이 되었나 보네요 ^^*
    감사합니다.
    2013.01.18 00:05 신고
  • 프로필사진 tedhaha 잘 배워갑니다!!! =) 2013.06.16 18:23
  • 프로필사진 junigguya 잘 배워갑니다^^ 퍼가는데 혹시 불쾌하시면 지우도록 하겠습니다.

    감사합니다.
    2013.07.04 17:16
댓글쓰기 폼