본문 바로가기
  • AI (Artificial Intelligence)
Programming/PHP

[기초 정리] PHP Framework, CodeIgniter 시작하기 [2부]

by 로샤스 2017. 7. 21.

[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'] = '';

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



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


10. 예제 파일 및 마무리

 ci.zip


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

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


















Reference: http://gyuha.tistory.com/259













댓글