CodeIgniter

Core 확장

Core

코어란 CodeIgniter 측 코드로 프래임웍이 기본적으로 동작하는 로직을 의미한다. 프래임웍은 일반적인 용도로 설계되어 있는 시스템이기 때문에 Core가 모든 특수한 상황에서도 적합하게 만들어진 것은 아니다. 그래서 Core를 수정해야 하는 상황이 생긴다. 하지만 Core를 수정하면 CodeIgniter가 버전업 됐을 때 여러가지 문제가 발생할 수 있다. 이런 문제를 완화하기 위해서 프래임웍들은 Core를 확장해서 커스터마이징하는 방법을 제공하는데 CodeIgniter에서는 코어를 상속하는 방법과 Hook라는 방법을 제공한다. 이번 시간에는 코어를 상속하는 방법을 알아볼 것이다.

상속

상속이란 객체지향의 개념으로 CodeIgniter의 코어는 어디서나 호출 할 수 있는 함수로 만들어진 것도 있고, 또 클래스로 만들어진 것도 있다. 이 중 클래스로 만들어진 library, controller, model 등은 Core의 기능을 상속하면서 필요에 따라서 동작방법을 수정 할수도 있다. 이것을 이해하기 위해서는 객체지향에 대해서 어느정도 지식이 필요  하지만 객체지향은 이 수업을 범위를 넘어서기 때문에 PHP 객체지향 모듈을 참고하자. 객체지향을 잘 모른다고해도 필자의 가이드를 따라한다면 코어의 기능을 확장할 수 있다.

코어 확장 방법

application 디렉토리 아래는 core라는 디렉토리가 있다. 여기에 들어올 수 있는 파일은 MY_Controller 와 MY_Model 파일이다. 이 파일들은 각각 CI_Controller와 CI_Model 클래스를 상속한다. 이것은 CI에서 사용하는 약속이다. 

Controller 확장방법

Controller 파일을 열어보면 클래스 선언부에 아래와 같이 되어 있는 것을 볼 수 있다. 

class Topic extends CI_Controller {

이중에 CI_Controller는 CodeIgniter가 기본적으로 제공하는 컨트롤러인데, 이것을 확장하기 위해서는 우선 application/core 디렉토리에 MY_Controller.php 파일을 만들고 아래와 같이 클래스를 만든다. 

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Controller extends CI_Controller {
    function __construct() {
		parent::__construct();		
    }    
}

그리고 위에서 살펴본 topic 컨트롤러의 선언을 아래와 같이 바꾼다. 

class Topic extends MY_Controller {

CI_Controller 이 MY_Controller로 변경됐다. 이제부터 topic 클래스는 CI_Controller이 제공하는 기능 뿐 아니라 MY_Controller이 제공하는 기능도 사용할 수 있게 된다. 

이제부터 MY_Controller 를 상속받고 있는 컨트롤러 클래스들은 MY_Controller의 메소드들을 이용할 수 있게 된다. 

 

 

Model 확장방법

Controller와 동일하다. MY_Model.php이라는 이름의 파일을 application/core 디렉토리에 만들고 CI_Model을 상속 받는 클래스를 만든 후에 모델 파일들이 MY_Model을 상속 받도록 하면 된다. 

예제

 github

태그

댓글

댓글 본문
작성자
비밀번호
  1. JustStudy
    고맙습니다
  2. 샤핀
    php 객체 지향 수업에 토픽이 없어서 서점 목록 등을 뒤졌었는데, php 객체 지향 등으로 검색해도 정보가 별로 없었는데. 역시 도큐먼트에 내용이 있군요. 감사합니다.
    대화보기
    • egoing
      http://php.net......php

      있습니다 :)
      대화보기
      • 샤핀
        잘봤습니다. 궁금한 점이 있는데 객체 지향 수업 준비도 하신다고 했었는데요.
        상속에서 사용하는 코드가 C++에서 사용하는 것과 유사한데, php와 C++이 어느정도 연관이 되어 있는 건가요?

        그리고 자바로 따지면 private, public, protected, default 같은 .... php에도 접근 제어자 같은 개념이 있나요?
      • jio1122
        감사합니다 ㅎㅎ
      • 김승갑
        감사합니다.
      • gulteogi
        많이 늦은 상태에서 보고 있기는 하지만 재미있게 잘 보고 있답니다^^.

        설명도 잘해주시고 php 하드코딩에서 라이브러리 사용하니 시간이 진짜 빨라지기는 하네요~^^

        배우면서 홈페이지 새로 하나 만들고 있는데 재미 있습니다. 감사합니다.
      • egoing
        그렇군요. 확인해보겠습니다. 알려주셔서 고맙습니다
        대화보기
        • 별모모
          CI_controler을 사용할 때, 처음부터 MY_controler을 만들고 시작하는 것이 더 좋겠습니다.

          [댓글(계정설정) 이미지]
          댓글 사진을 [계정설정]에서 등록하면 등록되었다고 하는데, 이미지가 나오지 않습니다.
          --------------------------

          * (점선 위 내용, 2013.10.20.13:33분) 수정하고 저장할 때마다 <br/>태그가 하나씩 늘어나서 줄 간격이 넓어집니다.

          잘 보고 있습니다. 고맙습니다.
        • egoing
          음 youtube 문제가 아닐까요? 제가 다시 보니까 그런 문제는 없는 것 같아요. 다시 한번 체크 부탁드립니다.
          대화보기
          • 열공!열공!
            왠지...강의가 중간에 잘린듯한데요 ^^;;;$this->_footer(); 하다가 갑자기 설명이 끊겨서요
          버전 관리
          egoing
          현재 버전
          선택 버전
          graphittie 자세히 보기