codeigniter 강의

12
CodeIgniter 강강 2009. 8. 6 강강강 ([email protected]) 2009-07-30 1

Upload: bruce-nguyen

Post on 03-Jan-2016

144 views

Category:

Documents


1 download

DESCRIPTION

CodeIgniter 강의. 2009. 8. 6 변종원 ([email protected]). 목 차. CodeIgniter 란 ? 3p CI 동작개념도와 구조 4p URL 규칙 5p MVC 6 ~ 8p Library, Plugin, Helper 9p W3 구조 ( 메뉴관리 -URL-PLUGIN) 10p W3 PLUGIN 만들기 11 ~ 12p. CodeIgniter 란 ?. ab -c 5 -n 1000 ab -c 5 -n 1000 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: CodeIgniter  강의

CodeIgniter 강의

2009. 8. 6변종원 ([email protected])

2009-07-30 1

Page 2: CodeIgniter  강의

목 차

• CodeIgniter 란 ? 3p• CI 동작개념도와 구조 4p• URL 규칙 5p• MVC 6 ~ 8p• Library, Plugin, Helper 9p• W3 구조 ( 메뉴관리 -URL-PLUGIN) 10p• W3 PLUGIN 만들기 11 ~ 12p

2009-07-30 2

Page 3: CodeIgniter  강의

CodeIgniter 란 ?

코드이그나이터 ( 이하 CI) 는 PHP 를 이용하여 웹사이트를 구축하고자 하는 사람들을 위한 개발 프레임 워크 입니다 . CI 는 날코딩 하는 분들을 위해 풍부한 라이브러리 , 쉬운 인터페이스 및 쉬운 로직을 제공함으로써 개발속도를 높여 드릴 것입니다 . CI 는 사용자들이 최소한의 코딩만 하도록 하여 프로젝트에 집중할 수 있도록 해줍니다 .

누구를 위한 것인가 ? • 최소 노력으로 사용할 수 있는 프레임워크를 원한다 .• 놀라운 프로그램 성능을 원한다 .• 다양한 호스팅 환경 , 다양한 PHP 버전에서 사용가능 한 호환성을 원한다 .• 거의 설정이 필요 없는 프레임워크를 원한다 .• 커맨드라인에서 뭔가를 입력할 필요가 없는 프레임워크를 원한다 .• 제한적인 코딩 규칙이 없는 프레임워크를 원한다 .• PEAR 같이 큰 라이브러리를 별로 좋아하지않는다 .• 템플릿 언어를 억지로 배우고 싶지 않다 .• 복잡한 것 대신 심플한 솔루션을 좋아한다 .• 명확하고 전체 내용을 몽땅 다 설명해주는 설명서를 원한다 .

특징• CodeIgniter 는 무료입니다 • CodeIgniter 는 PHP4 에서 동작합니다 • CodeIgniter 는 가볍고 빠릅니다• CodeIgniter 는 M-V-C 패턴에 기반합니다• CodeIgniter 는 깔끔한 URL 을 생성합니다 • CodeIgniter 는 확장 가능합니다 • CodeIgniter 는 굉장히 위력적입니다 • CodeIgniter 는 템플릿 엔진이 필요없습니다• CodeIgniter 는 완벽하게 문서화 되어있습니다 • CodeIgniter 는 친절한 사용자 커뮤니티가 있습니다 .

설계목적 : 극한의 성능 , 적용성 , 최소성 , 유연성 , 가벼움• 동적인 작동• 느슨한 결합• 컴포넌트 단일성

ab -c 5 -n 1000 ab -c 5 -n 1000 ab -c 100 -n 10000

실행속도 비교

2009-07-30 3

Page 4: CodeIgniter  강의

CI 동작개념도와 구조

2009-07-30 4

• The index.php 는 프론트콘트롤러 (front controller) 로 동작하여 CI 가 동작하기 위한 기반리소스들을 초기화 합니다 .• 라우터모듈 (Routing) 은 http 요청을 분석하여 어떤 동작을 해야 할지를 결정합니다 .• 캐쉬파일이 있다면 그 파일을 바로 브라우저로 보내고 일반적인 동작절차는 무시합니다 .• 보안모듈 (Security) 은 프로그램 컨트롤러가 로딩 되기전에 HTTP 요청 및 어떤 사용자 전송데이터든지 모두 필터링합니다 .• 컨트롤러 (Application controller) 는 사용자 요청을 처리하기 위해 모델을 로드하고 , 코어라이브러리 , 플러그인 , 헬퍼 및 필요한 다른 리소스들을 로드 합니다 . • 최종적으로 뷰모듈 (View) 이 렌더링되어 브라우저로 전송됩니다 . 캐싱이 활성화 되어 있다면 먼저 캐쉬 (Cashing) 하여 다음 번 요청에 사용할 수 있도록 합니다 .

실제 사용 디렉터리

초기 설치시 디렉터리 구조

각종 설정컨트롤러 위치 (MVC 에서 C)

헬퍼함수 ( 리턴값이 없는 )

후킹 프로그램 위치에러메시지 ( 언어별 셋팅 )

사용자 library 나 core 확장 library

모델 위치 (MVC 에서 M)

뷰 위치 (MVC 에서 V)

Page 5: CodeIgniter  강의

2009-07-30 5

URL 규칙

http://hbuilder.com/class/function/ID

1. 첫 세그먼트는 호출될 컨트롤러 class 를 나타냅니다 .2. 두 번째 세그먼트는 클래스 안의 호출될 function, 혹은 메쏘드를 나타냅니다 .3. 세 번째 이후는 컨트롤러로 전달될 어떤 변수라도 될 수 있습니다 .(예제에서는 ID)

http://hbuilder.com/class/function/ID

Application/controllers/class.php<?phpclass Class extends Controller {

function Class(){

parent::Controller();}function index(){

echo ‘function 이 없을때 자동 실행됨 ';}function function(){

echo $this->uri->segment(3);}

}?>

Page 6: CodeIgniter  강의

2009-07-30 6

MVC - CONTROLLERS

http://hbuilder.com/index.php/test/hello/byun

Application/controllers/test.php

<?phpclass Test extends Controller {

function Test() {parent::Controller();

}

function index(){echo ‘function 이 없을때 자동 실행됨<br>';$this->_utility();

}

function hello(){$this->load->model(‘test_m’, ‘tmodel’);$data[‘content’] = $this->tmodel->hey($this->uri->segment(3));

$this->load->view(‘hello_v’, $data);}

function _utility(){ //Private 함수 , 내부에서만 호출가능echo” 내부에서만 되요” ;

}}?>

무조건 MVC 패턴을 고수할 필요는 없다 .모델을 만들지 않아도 될 정도의 간단한 처리는 controller 에서모델을 거치지 않고 처리해도 된다 .- MVC, VC(M) 형태

Page 7: CodeIgniter  강의

function hello(){ $this->load->model(‘test_m’, ‘tmodel’); $data[‘content’] = $this->tmodel->hey($this->uri->segment(3)); $this->load->view(‘hello_v’, $data);}

2009-07-30 7

MVC - MODELS

http://hbuilder.com/index.php/test/hello/byun

Application/models/test_m.php

<?php

class Test_m extends Model {

function Test_m(){        parent::Model();}

function guys(){

$val=‘ 안녕 ';return $val;

}

function hey($name){

$val=$this->guys();$content = $val.” ”.$name.”!!”;

return $content;}

}

?>

공개된 class 를 가져와 그대로 사용이 가능하다MODEL 의 기본 형태로만 바꿔주면 된다 .

http://phpclasses.org 공개된 php class

Page 8: CodeIgniter  강의

function hello(){ $this->load->model(‘test_m’, ‘tmodel’); $data[‘content’] = $this->tmodel->hey($this->uri->segment(3)); $this->load->view(‘hello_v’, $data);}

2009-07-30 8

MVC – VIEWS

http://hbuilder.com/index.php/test/hello/byun

Application/views/hello_v.php

<html><head><title>테스트 </title></head><body>

<h1><?=$content?></h1></body></html>

PHP 의 모든 구문 , 함수 사용 가능하다 .데이터는 model 에서 가공하여 view 에서는 if, foreach 정도만사용하는 것이 바람직하다 .

VIEW 를 데이터처럼 리턴 받기

$data[‘top’] = $this->load->view(‘top_v', '', true);$data[‘bottom’] = $this->load->view(‘bottom_v', '', true); $this->load->view(‘hello_v’, $data);

Page 9: CodeIgniter  강의

2009-07-30 9

Libraries

Plugins

플러그인은 헬퍼와 거의 비슷하게 동작차이점은 플러그인은 통상 하나의 기능을 제공하는 반면 , 헬퍼는 여러 기능들의 모음 . 헬퍼는 코어시스템의 일부로 인식 .

$this->load->plugin('captcha'); 플러그인을 로드하는 함수는 리턴값이 없음 . 로딩 후 사용은 표준 PHP 함수처럼 사용

Helpers

헬퍼는 객체지향적이지 않고 헬퍼의 함수는 간단하고 , 절차적이며 , 특정한 한가지 일만 하며 , 다른 헬퍼함수에 의존하지 않음

$this->load->helper(‘url');

Page 10: CodeIgniter  강의

2009-07-30 10

W3 구조

Page 11: CodeIgniter  강의

2009-07-30 11

W3 플러그인 만들기 1

MATCHBOX 적용 ( 기존 CI 구조로는 불가능 )

1.Application 디렉터리 이외에 외부 디렉터리에서 CI 의 모든 구조를 동일하게 사용할 수 있다 .2.URL 체계도 CI 와 동일하게 사용

http://hbuilder.com/index.php/board/board/lists /plugins/board/board/lists

WIDGET 적용 ( 기존 CI 구조로는 불가능 )

1.컨트롤러에서 다른 컨트롤러를 호출하여 사용2.여러 개의 플러그인을 모아 하나의 화면에서 출력하기 위해 사용

plugin::run($plugin, $module_directory, $controller, $function, $skin)

각종 설정컨트롤러 위치 (MVC 에서 C)

헬퍼함수 ( 리턴값이 없는 )

후킹 프로그램 위치에러메시지 ( 언어별 셋팅 )

사용자 library 나 core 확장 library

모델 위치 (MVC 에서 M)

뷰 위치 (MVC 에서 V)

플러그인 디렉터리 (application과 같은 레벨 )

플러그인 ( 이름으로 구분 )

플러그인

컨트롤러 (MVC 에서 C)

사용자 library 나 core 확장 library

모델 위치 (MVC 에서 M)

뷰 위치 (MVC 에서 V)

CI 기본 구조 플러그인 구조

Page 12: CodeIgniter  강의

2009-07-30 12

W3 플러그인 만들기

각종 설정컨트롤러 위치 (MVC 에서 C)

헬퍼함수 ( 리턴값이 없는 )

후킹 프로그램 위치에러메시지 ( 언어별 셋팅 )

사용자 library 나 core 확장 library

모델 위치 (MVC 에서 M)

뷰 위치 (MVC 에서 V)

플러그인 디렉터리 (application과 같은 레벨 )

플러그인 ( 이름으로 구분 )

플러그인

컨트롤러 (MVC 에서 C)

사용자 library 나 core 확장 library

모델 위치 (MVC 에서 M)

뷰 위치 (MVC 에서 V)

CI 기본 구조 플러그인 구조

class Test extends Controller {

function Test(){parent::Controller();

}

function index(){

CI 와 플러그인의 controller 구조 비교

class Test extends Plugin {

function __construct(){ $this->CI = & get_instance();

}

function run($plugin, $module_directory, $controller, $function, $skin){