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을 상속 받도록 하면 된다.
예제
태그
- 태그명 : core
- 태그주소 : https://github.com/egoing/codeigniter_codeingeverbody/tree/Core