128june

[Codeigniter] 기본적인 MVC 모델 구현 본문

JetBrain/PHP Storm & Codeigniter

[Codeigniter] 기본적인 MVC 모델 구현

128june 2020. 6. 8. 20:41
반응형

Database의 내용을 조회하는 기본적인 MVC 모델을 만들어보겠습니다!

글 작성에 앞서서 아직 Codeigniter과 Database를 연결하지 못하신분은

[Codeigniter] Database 설정하기 (Mysql 5.7)를 참고해주세요!

 

[Codeigniter] Database 설정하기 (Mysql 5.7)

1. Codeigniter와 Mysql을 연결하려면 application/config/database.php 파일의 내용을 변경해주어야합니다. $active_group = 'default'; $query_builder = TRUE; $db['default'] = array( 'dsn' => '', // 보통은..

128june.tistory.com


※ Database 설정

먼저 저는 다음과 같은 board 테이블을 만들었습니다.

junedb의 board 테이블

똑같이 따라하실 분들을 위해서 create 와 insert 코드를 올려놓겠습니다.

CREATE TABLE board (
id INT(20) AUTO_INCREMENT PRIMARY KEY,
pid INT(20) DEFAULT 0 ,
user_id VARCHAR(20),
user_name VARCHAR(20) NOT NULL,
title VARCHAR(50) NOT NULL ,
contents text ,
view_cnt INT(20) not null DEFAULT 0 ,
enroll_date DATETIME NOT NULL
) DEFAULT CHARACTER SET utf8;

id : Auto_Increment 되는 항목으로 글 번호입니다.

pid : 원글 번호로 기본은 0번이고, 댓글을 만들 시 해당하는 원글의 id가 pid로 설정됩니다.

user_id : 유저 아이디

user_name : 유저 이름

title : 글 제목

contents : 내용

view_cnt : 조회수 => 기본값은 0으로 지정하였습니다.

enroll_date : 작성 날짜 (임의로 정하여 넣었습니다. 나중에 수정할 예정으로 수정하실 분들은 바꾸셔도됩니다!)

INSERT INTO board
(user_id, user_name, title, contents, view_cnt, enroll_date)
VALUES
('aaa1','홍길동1','1번글작성','test',0,'2020-06-05 11:14:00');
INSERT INTO board (
user_id, user_name, title, contents, view_cnt, enroll_date)
VALUES
('aaa2','홍길동2','2번글작성','test',0,'2020-06-05 11:15:00');
INSERT INTO board (
user_id, user_name, title, contents, view_cnt, enroll_date)
VALUES
('aaa3','홍길동3','3번글작성','test',0,'2020-06-05 11:16:00');
INSERT INTO board (
user_id, user_name, title, contents, view_cnt, enroll_date)
VALUES
('aaa4','홍길동4','4번글작성','test',0,'2020-06-05 11:17:00');
INSERT INTO board (
user_id, user_name, title, contents, view_cnt, enroll_date)
VALUES
('aaa5','홍길동5','5번글작성','test',0,'2020-06-05 11:18:00');

INSERT INTO board (
pid, user_id, user_name, title, contents, view_cnt, enroll_date)
VALUES
(5,'aaa5','홍길동5','5번글의 댓글 작성','test',0,'2020-06-05 11:18:00');
INSERT INTO board (
pid, user_id, user_name, title, contents, view_cnt, enroll_date)
VALUES
(4,'aaa4','홍길동4','4번글의 댓글 작성','test',0,'2020-06-05 11:18:00');

1. 먼저 Board.php 라는 이름의 Controller를 만들어줍니다.

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Board extends CI_Controller {

    /**
     * Board constructor. : 생성자
     */
	public function __construct()
    {
        // 기본 선언
        parent::__construct();
        $this->load->model('Board_model');
    }

    /**
     * 주소에서 method가 생략되었을 때 기본으로 실행
     */
    public function index(){}

    /**
     * model의 get_list()로 목록 불러오기
     */
    public function lists() {
        // Board_model에서 get_list()로 list를 받아와 data['list']로 저장합니다.
        $data['list'] = $this -> Board_model -> get_list();
        
        // 저장한 data를 view인 board_view에 넘겨줍니다.
        // view의 경로로 board 폴더 안에 넣어주었습니다. 
        $this -> load -> view('board/board_view', $data);
    }
    
}

여기서 __construct() 함수는 생성자 입니다.

기본적으로 controller가 실행될 때 model 'Board_model.php'가 load되도록 설정해주었습니다.

 

index() 함수는 주소에서 method가 생략되었을 때 기본으로 실행됩니다.

일단 아무것도 넣지 않았습니다.


2. Controller에서 model로 잡아준 Board_model.php 에서 select구문을 통해 전체 list를 불러옵니다.

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Board_model extends CI_Model{

    /**
     * Board_model constructor. : 생성자
     */
    function __construct()
    {
        parent::__construct();
        // database load
        $this->load->database();
    }

    /**
     * 전체 조회
     * @param string $table
     * @return mixed
     */
    function get_list($table='board'){
        
        // 전체조회 sql
        $sql = "select * from $table order by id desc";
        
        // sql 구문을 통한 query 실행
        $query = $this->db->query($sql);
        
        // query 실행 결과를 result 변수에 담아서 return 합니다. 
        $result = $query->result();
        return $result;
    }

}

Controller에서 모델을 불러왔듯이 생성자를 통해 Database를 load합니다.

 

이후 get_list 함수를 만들어 전체 조회한 데이터를 return 해줍니다.


3. 마지막으로 view에서 list를 받아 출력해줍니다. ( board/board_view.php )

<html>
<head>
    <title>CodeIgniter 전체 조회</title>
</head>
<body>

<table>
    <tr>
        <th>번호</th>
        <th>제목</th>
        <th>작성자</th>
        <th>조회수</th>
        <th>작성일</th>
    </tr>
    <?php
    // 받아온 리스트 : $list
    // 단일 항목 : $item
    foreach($list as $item){
    ?>
    <tr><!-- 단일 항목인 $item으로 해당하는 값을 출력합니다. -->
        <td><?php echo $item -> id;?></td>
        <td><?php echo $item -> title;?></td>
        <td><?php echo $item -> user_name;?></td>
        <td><?php echo $item -> view_cnt;?></td>
        <td><?php echo $item -> enroll_date;?></td>
    </tr>
    <?php
    }
    ?>
</table>

</body>
</html>

4. 출력 결과

주소는 localhost/index.php/board/lists 입니다

다음과 같이 출력되는 것을 확인할 수 있었습니다.


※ 주소는 localhost/index.php/board/lists 인데 기본적으로 설정된 localhost/index.php 주소에

controller의 이름인 boardcontroller의 함수 lists로 맵핑됩니다.

 

※ 주소값에 index.php를 다른 것으로 바꾸는 방법은 차차 올리겠습니다!

 

 

반응형
Comments