CodeIgniter 3

wonyoung·2025년 3월 4일

CodeIgniter란?

PHP기반 프레임워크 빠르고 MVC모델 지원

Controller

  • url에 맵핑되는 작업을 수행
    도메인 / Controller / Controller의 func
  • 도메인 /index.php/func/get/2이면 func 클래스 내부의 get 메소드를 호출하고 파라미터 인자를 정의해준다면 $id 변수에는 2가 출력된다.

View

  • index 메소드가 실행되면 view 메소드에 xx 값을 인자로 전달하게되고 views 디렉토리 밑에 xx.php 파일을 로드하게 된다.
  • $this->load->view();라고하는 API를 호출해서 로딩하고자 하는 파일의 이름에서 .php를 제외한 부분을 인자로 전달해주면 codeigniter가 알아서 로드해준다.
  • view에 어떤 data를 전달해주고 싶다면 아래와 같이 배열로 view 두번째 인자로 전달해준다.
  • view에서 사용할때는 변수 그대로의 값을 출력한다면 형태로 사용
    view manual
seo.php
class Config extends CI_Controller {
   public function index() {
   	$this->load->view('topic');
   }
   public function get($id) {
   	$data = array('id'=>$id);
    $this->load->view('get',$data);
   }
}

Model

  • model은 주로 Database를 의미. 데이터베이스를 다루는 로직을 모아 데이터와 뷰를 격리시켜 코드관리의 편의성을 높이고 향후 데이터베이스를 다른 타입으로 교체가 용이하다.

  • 데이터베이스 설정(config > database.php)

  • hostname : 데이터베이스 서버의 주소 (localhost는 PHP와 같은 머신을 의미)

  • username : 데이터베이스 사용자의 이름

  • password : 데이터베이스 비밀번호

  • database : 데이터베이스 명

  • dbdriver : 데이터베이스의 종류로 지원되는 드라이브의 목록 system/database/drivers 디렉토리명을 참고한다.

database설정파일은 서버에 접속할 수 있는 기밀정보가 포함되어 있기때문에 버전관리에 포함시키면 안된다. gitignore에 추가시키는 방법도 있다.

데이터베이스 라이브러리 로드
데이터베이스를 사용하기 위해 라이브러리를 로드하는 방법 2가지

  • autoload.php파일의 $autoload['libraries'] = array('database');형태로 배열에 'database'를 추가
  • controller 내부 파일에서 $this->load->database()를 호출

MODEL manual
쿼리결과 생성+
모델클래스의 기본 프로토 타입예:

class Model_name extends CI_Model {

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

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Topic extends CI_Controller { //동일한 메소드를 호출할 때
function __construct()
{       
    parent::__construct();
    $this->load->database(); //controller에서 DB 라이브러리 호출
    $this->load->model('topic_model'); // 모델 디렉토리 밑에 'topic_model.php'파일을 php가 읽어서 Topic_model class를 로드
}
function index(){        
    $this->load->view('head');
    $topics = $this->topic_model->gets(); // 해당 오브젝트에 접근해서 gets 메소드를 호출
    $this->load->view('topic_list', array('topics'=>$topics)); //가져온 data를 두번째 인자에 배열형태로 뷰에 전달
    $this->load->view('main');
    $this->load->view('footer');
}
function get($id){        
    $this->load->view('head');
    $topics = $this->topic_model->gets();
    $this->load->view('topic_list', array('topics'=>$topics));
    $topic = $this->topic_model->get($id);
    $this->load->view('get', array('topic'=>$topic));
    $this->load->view('footer');
}
}
?>

Underscore.js

🔹 Underscore.js는 JavaScript의 유틸리티 라이브러리로, 배열, 객체, 함수 등의 다양한 기능을 제공함.
🔹 템플릿 기능(_.template)을 포함하고 있어서, React처럼 데이터를 바인딩하여 HTML을 렌더링 가능.

<script type="text/template" id="exampleTemplate">
    <h1><%= title %></h1>
    <p><%= description %></p>
</script>

<script>
    var template = _.template($('#exampleTemplate').html());
    var html = template({ title: "안녕하세요!", description: "Underscore.js로 렌더링된 템플릿입니다." });
    $('#content').html(html);
</script>

✅ 4. 그러면, "템플릿 언더바"는 왜 쓰는 건가?
🔥 템플릿 언더바(template)는 프로젝트마다 다르게 정의된 커스텀 템플릿 엔진일 가능성이 큼
🔥 Underscore.js의
.template과 유사하게 동작하지만, 프로젝트마다 다를 수 있음

💡 즉, template_을 적용해야 한다는 것은 해당 프로젝트에서 사용 중인 템플릿 시스템에 맞게 HTML을 동적으로 생성해야 한다는 의미
💡 하지만, 일반적인 JavaScript 템플릿 라이브러리(예: Underscore.js)와는 다를 수 있음


📌 결론

✅ Underscore.js (.template) = JavaScript 라이브러리로, React처럼 변수 바인딩 가능
✅ template
(템플릿 언더바) = 프로젝트별 커스텀 템플릿 시스템일 가능성이 큼 (JavaScript 또는 PHP)
✅ 둘 다 JavaScript에서 동적 HTML 렌더링에 사용될 수 있음
✅ 어떤 "template_"을 적용해야 하는지는 해당 프로젝트의 템플릿 엔진을 확인해야 함

profile
😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀

0개의 댓글