MVC
- 디자인패턴 : 건축에서 유래, 건축은 공법을 가지고 있다.
- 소프트웨어에도 이 공법을 적용할 수 있다!라는 생각에서 건축기법을 가져옴
- 소프트웨어의 개발의 디자인 패턴 중 하나
- MODEL VIEW CONTROLLER 의 약자
- 애플리케이션을 구현할 때 MVC 세가지 주체로 나누어 구현을 하면,좀 더 효율적으로구축할 수 있다.
즉 URL 해석 : 사용자의 요구사항, 의도가 무엇인지 ex) 이 리스트의 1번글이 보고 싶어! ~/index.php/topic/get/1
클래스, URL에 해당되는 메소드(Model, View 호출)가 정의되어 있다.
2. Model
사용자의 요구에 맞는 데이터를 가져온다.
3. View
사용자에게 최종적으로 보여줌.
Controller ( MVC 중에서 'C')
- 작성한 코드 파일은 application > controllers 에 저장
- URL에 맵핑되는 어떤 작업을 수행하는 것. ( URL과 연관성 )
- URL에 대한 클래스나 메소드를 정의하면 코드이그나이터가 알아서 그것들을 호출해준다.
▣ 규칙
1. 파일명과 동일한 class명(첫글자는 무조건 대문자, 나머지는 소문자 사용)을 사용한다(파일명도 첫글자 대문자;CIv3). (Line 4)
* extends CI_Controller : 부모클래스를 상속받도록 하는 것
2. 주소 뒤에 어떠한 이름도 쓰지 않았을 때, Topic이라고 하는 클래스에, index() 메소드를 호출하도록 약속되어 있다. (Line 6)
-> Address : ~/odeIgniter-3.1.5/index.php/topic
-> Output : '토픽 페이지';
3. 특정 메소드 끝에 특정한 값을 전달하고 싶다면, 파라미터를 정의하자. (Line 11)
-> Address : ~/odeIgniter-3.1.5/index.php/topic/get
-> Output : '토픽';
-> Address : ~/odeIgniter-3.1.5/index.php/topic/get/1
-> Output : '토픽1'; $id(~/get/$id) 값에 따라 숫자가 바뀜.
View ( MVC 중에서 'V')
applications>views 에 저장.
- 화면상에 출력되어 있는 것과 관련되어 있다. (html, css, javascript)
▣ 왜 view를 사용해야하는가?
- Controller 안에 있는 시각적으로 표현되는 것들을 따로 모아 (applications>view), 독립된 파일인 것처럼 처리함으로써 깔끔하고 체계적으로 자원들을 관리하기 위해서.
- 업무적으로, 개발자와 디자이너, 퍼블리셔가 자기 위치에서 업무를 수행함으로써 업무효율을 높이고, 수정 과정에서 오류 위험성도 낮출 수 있다.
▣ 규칙
1. $this->load->view('파일명');
: view라고 하는 메소드에 topic이라고 하는 값을 인자로 전달하게되면, 코드이그나이터는 알아서 이 구문이 실행될 때 application>views>topic.php를 로드하도록 약속
인자에 '.php' 를 써주지 않아도 인식. (Line 8)
2. $this->load->view( '파일명' , 연관배열 );
: view의 두번째 인자로 연관배열을 전달하면, 연관배열에 있는 키 값에 따라서 main.php 코드 안의 $id가 그 값을 받아서 화면에 출력할 수 있다.
( * 기억: 연관배열의 키값은 VIEW에서 변수명으로 사용.)
1번과 동일하게 $this->load->view('main'); 으로 할 경우, 인자를 전달받지 못해 에러(출력모습 : 토픽 '.$id.' )가 나지만 이렇게 처리하면 에러가 나지 않는다. (Line 15~16)
<controller : topic.php>
<view : main.php >
* foreach문 에러시 빈값 체크를 해주어야 한다.
<?=$entry(전체)->뿌리고 싶은 필드명?>
MODEL ( MVC 중에서 'M')
controller가 복잡해지는 것을 막고, 역할에 따라 모듈화 하는 것.
DATABASE, 즉 데이터를 담당하는 곳.
▣ 코드 작성하기
1. 데이터베이스 설정
application>config> databases.php 파일 수정 : 이 파일은 보안상 위험하고 취약한 파일, permission을 소유자(apache)에게만 읽을 수 있는 권한을 주고 나머지 사용자에게는 어떠한 권한을 주지 않는 것이 좋다. 버전관리시스템에 올릴 때 , 공개 되기 때문에 버전관리시스템에 올릴때 ignore 설정을 해야함.
(* 설정과 관련된 파일들이 있는 디렉토리 : applicaition > config)
- 변경 항목 -
hostname
database username
database password
database : 사용 DB 명
dbdriver : mysqli (데이터베이스 시스템 적기 : database 폴더 아래 drivers 폴더 아래 폴더 이름 참고해서 적기)
2. databases라는 라이브러리 로드하기
실제로 DB를 핸들링하기 위해서 여러가지 편의를 제공하기 위한 라이브러리를 코드이그나이터가 제공해줌.
그것을 사용하기 위해서는 이 해당 라이브러리를 로드하는 방법을 알아야함
1. application > config > autoload.php 열기
libraries 라는 배열에 database 넣기 ($autoload['libraries'] = array('database);)
: 코드이그나이터가 실행될때, 자동으로 데이터베이스와 관련된 라이브러리를 로드해줌 (따라서 한번만 설정해 주면 됨)
* db를 자주 사용하지 않는 서비스를 만든다면 비효율적, 이 때는 이 작업을 하지 않고, controller에서 해당 작업을 해주면 된다. (대부분의 경우)
: $this->load->database();
2. model 만들기
application > model > new file 생성 (파일명도 첫글자 대문자;CIv3)
테이블 이름을 가진 모델을 하나씩 생성해주는 것이 일단은 깔끔한 규칙(무조건인 규칙은 아니다.)
ex) topic_model.php : topic이라고 하는 테이블을 핸들링하는 모델을 만든 것
▣ 규칙
1. function __construction(){ parent::__construct(); ......... }
Line 3: 코디이그나이터에서 제공하는 CI_MODEL이라는 클래스를 꼭! 상속해주어야 한다.
Line 5~7 : __construct()는 php 생성자로, 해당 클래스가 내부적으로 생성될 때 제일 먼저 실행되는 일종의 초기화와 관련된 함수이다.
모델에서 어떤 메소드를 호출하던간에 언제나 동일하게 사용되는 작업이 있다면 여기(parent::__contruct(); 다음에)에 기술하면 된다.
2. 테이블의 데이터 리스트 가져오기 API : gets()
public function gets(){ }
3. 테이블 데이터 가져오기
방법 1) query문
: return $this->db->query('SELECT * FROM topic')->result();
$this->db : 현재 우리가 설정한 db에 접속할 수 있는 인스턴스
query() API : ()안에 작성된 query문을 이용해서 결과값을 어떤 방식으로(result())로 보여줄지 결정하는 것. result() 결과값은 객체의 형태로 담겨져 있다.
result() 또는 result_array() : 배열객체와 연관배열의 차이 (선택적 사용)
방법 2) Active record
: return $this->db->get_where('테이블명', array('담고싶은필드명' => '담고 싶은 필드명을 저장할 변수')->result() 또는 row() ... ;
return $this->db->get_where('topic', array('id'=>$topic_id))->row();
( == return $this->db->query('SELECT * FROM topic WHERE id='$topic_id'')->result(); )row(): get을 통해서 (where 조건에 의해) 단 한 건의 데이터를 가져올 때 사용.
* 일반적으로 방법2를 많이 씀. why?
각각의 DB 서비스들은 표준 sql문을 공통으로 사용하기 때문에 이식성( 다른 데이터베이스로 넘어r가는 것. )이 좋기 때문.
코드이그나이터에서 파일 다루기
1. html,css,js,image 등 개발자 작성 파일
일반적 : 루트디렉토리(코드이그나이터가 설치된 위치) 아래 특정 폴더(디렉토리)생성 > 그 아래 img, js, css 등 언어에 따른 폴더 생성
2. 사용자가 업로드 한 파일.
* 부트스트랩과 같은 라이브러리는 1번에서 루트디렉토리 아래 생성한 폴더에서 > lib라는 폴더 생성후, 그 곳에 설치.
'Language > PHP' 카테고리의 다른 글
[CodeIgniter] 로그 (0) | 2017.08.19 |
---|---|
[CodeIgniter] 설정 (0) | 2017.08.19 |
[CodeIgniter] Helper (0) | 2017.08.18 |
[CodeIgniter] URI Routing (0) | 2017.08.17 |
CodeIgniter (코드이그나이터) (0) | 2017.08.17 |