codeigniter 강의
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 PresentationTRANSCRIPT
목 차
• 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
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
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)
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);}
}?>
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) 형태
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
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);
2009-07-30 9
Libraries
Plugins
플러그인은 헬퍼와 거의 비슷하게 동작차이점은 플러그인은 통상 하나의 기능을 제공하는 반면 , 헬퍼는 여러 기능들의 모음 . 헬퍼는 코어시스템의 일부로 인식 .
$this->load->plugin('captcha'); 플러그인을 로드하는 함수는 리턴값이 없음 . 로딩 후 사용은 표준 PHP 함수처럼 사용
Helpers
헬퍼는 객체지향적이지 않고 헬퍼의 함수는 간단하고 , 절차적이며 , 특정한 한가지 일만 하며 , 다른 헬퍼함수에 의존하지 않음
$this->load->helper(‘url');
2009-07-30 10
W3 구조
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 기본 구조 플러그인 구조
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){