128june

[Codeigniter] MVC 모델 - Controller에 대해서 본문

JetBrain/PHP Storm & Codeigniter

[Codeigniter] MVC 모델 - Controller에 대해서

128june 2020. 6. 5. 17:26
반응형

Codeigniter을 설치하지 않으신 분은 Codeigniter 설치하기 [윈도우 64bit]를 참조해주세요!

 

Codeigniter 설치하기 [윈도우 64bit]

1. 먼저 Apache / PHP를 설치해야합니다. 주소는 다음 링크들을 따라서 설치하시면 됩니다! Apache 2.4 설치 [윈도우10 64bit] Apache 2.4 설치 [윈도우10 64bit] 1. 먼저 https://www.apachelounge.com/download/..

128june.tistory.com


1. Controller - index()

application/controllers 폴더에 Board.php라는 파일을 만들어봅니다.

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

class Board extends CI_Controller {

	public function index()
	{
        echo '<head>';
        echo '<meta charset=\'utf-8\'>';
        echo '</head>';
        echo 'hello everybody';
	}
}

이 경우 localhost/index.php/board 또는 localhost/index.php/board/index 링크를 통해 다음과 같이 출력됩니다.

localhost/index.php/board에서 /index 를 붙여도 되고 안붙여도 된다

2. Controller - index() / juneWorld()

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

class Board extends CI_Controller {

	public function index()
	{
        echo '<head>';
        echo '<meta charset=\'utf-8\'>';
        echo '</head>';
        echo 'hello everybody';
	}

    public function juneWorld(){
        echo '<head>';
        echo '<meta charset=\'utf-8\'>';
        echo '</head>';
        echo 'Welcome June World!';
    }
}

이렇게 함수가 두 개 있는 경우 -> http://localhost/index.php/board/ 의 하위로 다음과 같은 두 링크가 생깁니다.


3. 이제 model을 연결해봅니다.

먼저 application/controllers 폴더에 Main.php를 만듭니다.

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

class Main extends CI_Controller {

    function __construct() {
        parent::__construct();

    }

    //index 함수 => "URL/index.php/main" or "URL/index.php/main/index"로 설정
    public function index() {
        // $this->load->model : /application/models 폴더를 탐색
        // model('[modelfile]') : model에는 /application/models에 있는 Main_model.php를 설정  
        // $this->Main_model->test();는 로드된 Main_model.php의 test 함수를 실행
        $this->load->model('Main_model');
        $this->Main_model->test();
    }
}

index 함수에서 $this 변수가 ( -> ) load를 하는데 ( -> ) 무엇을 하냐? model('Main_model')을 load합니다.

load를 했으니 모델 안에 있는 함수인 test()를 가져다 사용하는 것으로 index 함수의 행동이 끝납니다.


다음은 application/models 폴더에서 Main_model.php를 만듭니다.

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


class Main_model extends CI_model {

    function __construct(){
        parent::__construct();
        //database.php 파일에서 $test(database이름)['test(table이름)'] 설정값 load
        $this->test = $this->load->database('default', TRUE);
    }

    function test() {
        // Database에 query 요청
        $query = $this->test->query("SELECT * FROM test");
        foreach ($query->result_array() as $row)
        {
            echo '번호 : ', $row['num'];
            echo '<br>';
            echo '제목 : ', $row['title'];
            echo '<br>';
        }
    }
}

먼저 생성자 __construct()를 불러옵니다.

Controller 에서 $this->load->model('Main_model');를 먼저 실행했으니

▶ 생성자를 부르면서 database의 'default'값을 load하고 이를 test에 담습니다.

 

다음으로 $this->Main_model->test();가 실행되면서

▶ Model의 함수 test()가 실행되고 database에 query가 요청되면서 다음을 출력합니다.

Controller인 Main.php를 통해서 출력된 결과

1. 이처럼 Controller에 담겨있는 함수들을 통해서 주소가 Mapping됩니다.

 

2. 해당하는 주소에 Model의 데이터, 즉 query를 요청하여 data를 받아오고

 

3. 이후 View에 전달함으로써 전달한 Data로 View에서 출력을 하는 구조가 MVC 모델입니다.


댓글로 틀리거나 수정할 부분을 알려주시면 수정하겠습니다.

감사합니다!!

반응형
Comments