130 likes | 474 Views
CodeIgniter 강의. 2009. 8. 6 변종원 (blumine@paran.com). 목 차. 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
E N D
CodeIgniter 강의 2009. 8. 6 변종원(blumine@paran.com)
목 차 • 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 ab -c 100 -n 10000 실행속도 비교 코드이그나이터(이하 CI)는 PHP를 이용하여 웹사이트를 구축하고자 하는 사람들을 위한 개발 프레임 워크 입니다. CI 는 날코딩 하는 분들을 위해 풍부한 라이브러리, 쉬운 인터페이스 및 쉬운 로직을 제공함으로써 개발속도를 높여 드릴 것입니다. CI는 사용자들이 최소한의 코딩만 하도록 하여 프로젝트에 집중할 수 있도록 해줍니다. 누구를 위한 것인가? • 최소 노력으로 사용할 수 있는 프레임워크를 원한다. • 놀라운 프로그램 성능을 원한다. • 다양한 호스팅 환경, 다양한 PHP 버전에서 사용가능 한 호환성을 원한다. • 거의 설정이 필요 없는 프레임워크를 원한다. • 커맨드라인에서 뭔가를 입력할 필요가 없는 프레임워크를 원한다. • 제한적인 코딩 규칙이 없는 프레임워크를 원한다. • PEAR 같이 큰 라이브러리를 별로 좋아하지않는다. • 템플릿 언어를 억지로 배우고 싶지 않다. • 복잡한 것 대신 심플한 솔루션을 좋아한다. • 명확하고 전체 내용을 몽땅 다 설명해주는 설명서를 원한다. 특징 • CodeIgniter 는 무료입니다 • CodeIgniter 는 PHP4 에서 동작합니다 • CodeIgniter 는 가볍고 빠릅니다 • CodeIgniter 는 M-V-C 패턴에 기반합니다 • CodeIgniter 는 깔끔한 URL을 생성합니다 • CodeIgniter 는 확장 가능합니다 • CodeIgniter 는 굉장히 위력적입니다 • CodeIgniter 는 템플릿 엔진이 필요없습니다 • CodeIgniter 는 완벽하게 문서화 되어있습니다 • CodeIgniter 는 친절한 사용자 커뮤니티가 있습니다. 설계목적 : 극한의 성능, 적용성, 최소성, 유연성, 가벼움 • 동적인 작동 • 느슨한 결합 • 컴포넌트 단일성
CI 동작개념도와 구조 • The index.php 는 프론트콘트롤러(front controller)로 동작하여 CI가 동작하기 위한 기반리소스들을 초기화 합니다. • 라우터모듈(Routing)은 http 요청을 분석하여 어떤 동작을 해야 할지를 결정합니다. • 캐쉬파일이 있다면 그 파일을 바로 브라우저로 보내고 일반적인 동작절차는 무시합니다. • 보안모듈(Security)은 프로그램 컨트롤러가 로딩 되기전에 HTTP 요청 및 어떤 사용자 전송데이터든지 모두 필터링합니다. • 컨트롤러(Application controller)는 사용자 요청을 처리하기 위해 모델을 로드하고, 코어라이브러리, 플러그인, 헬퍼 및 필요한 다른 리소스들을 로드 합니다. • 최종적으로 뷰모듈(View)이 렌더링되어 브라우저로 전송됩니다. 캐싱이 활성화 되어 있다면 먼저 캐쉬(Cashing)하여 다음 번 요청에 사용할 수 있도록 합니다. 초기 설치시 디렉터리 구조 각종 설정 컨트롤러 위치 (MVC 에서 C) 헬퍼함수(리턴값이 없는) 후킹 프로그램 위치 에러메시지(언어별 셋팅) 사용자 library나 core 확장 library 모델 위치 (MVC 에서 M) 뷰 위치 (MVC 에서 V) 실제 사용 디렉터리
URL규칙 http://codeigniter-kr.org/user_guide/libraries/uri.html http://hbuilder.com/class/function/ID • 첫 세그먼트는 호출될 컨트롤러class 를 나타냅니다. • 두 번째 세그먼트는 클래스 안의 호출될 function, 혹은 메쏘드를 나타냅니다. • 세 번째 이후는 컨트롤러로 전달될 어떤 변수라도 될 수 있습니다 .(예제에서는 ID) http://hbuilder.com/class/function/ID <?php class Class extends Controller { function Class() { parent::Controller(); } function index() { echo ‘function이 없을때 자동 실행됨'; } function function() { echo $this->uri->segment(3); } } ?> Application/controllers/class.php
MVC - CONTROLLERS http://codeigniter-kr.org/user_guide/general/controllers.html 무조건 MVC패턴을 고수할 필요는 없다. 모델을 만들지 않아도 될 정도의 간단한 처리는 controller에서 모델을 거치지 않고 처리해도 된다. - MVC, VC(M) 형태 Application/controllers/test.php http://hbuilder.com/index.php/test/hello/byun • <?php • class 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 - MODELS http://codeigniter-kr.org/user_guide/general/models.html function hello() { $this->load->model(‘test_m’, ‘tmodel’); $data[‘content’] = $this->tmodel->hey($this->uri->segment(3)); $this->load->view(‘hello_v’, $data); } Application/models/test_m.php http://hbuilder.com/index.php/test/hello/byun • <?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
MVC – VIEWS http://codeigniter-kr.org/user_guide/general/views.html function hello() { $this->load->model(‘test_m’, ‘tmodel’); $data[‘content’] = $this->tmodel->hey($this->uri->segment(3)); $this->load->view(‘hello_v’, $data); } Application/views/hello_v.php http://hbuilder.com/index.php/test/hello/byun <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);
Libraries http://codeigniter-kr.org/user_guide/database/index.html 여러 플랫폼을 지원하는 완벽한 데이터베이스 클래스들 액티브레코드(Active Record Database) 지원 폼과 데이터의 검증 보안과 XSS 필터링 세션 관리 Email 전송클래스. 첨부파일지원.HTML/Text 지원.다양한 프로토콜 지원(sendmail, SMTP, and Mail) 등. 이미지 관리 라이브러리(자르기,크기조절,돌리기 등).GD , ImageMagick, NetPBM 지원 파일 업로드 클래스 FTP 클래스 로컬라이즈(Localization) 페이지네이션 데이터암호화 벤치마크 전체페이지 캐싱 에러 로깅 성능측정(Application Profiling) 스캐폴드(Scaffolding) 캘린더클래스 User Agent 클래스 Zip 압축 템플릿엔진 트랙백(Trackback) XML-RPC 라이브러리 단위테스트 검색엔진에 색인되기 좋은 URLs 유연한 URI 라우팅 후킹, 클래스확장, 플러그인 지원 방대한 헬퍼 라이브러리 Plugins http://codeigniter-kr.org/user_guide/general/plugins.html 플러그인은 헬퍼와 거의 비슷하게 동작 차이점은 플러그인은 통상 하나의 기능을 제공하는 반면, 헬퍼는 여러 기능들의 모음. 헬퍼는 코어시스템의 일부로 인식. $this->load->plugin('captcha'); 플러그인을 로드하는 함수는 리턴값이 없음. 로딩 후 사용은 표준 PHP함수처럼 사용 Helpers http://codeigniter-kr.org/user_guide/general/helpers.html 헬퍼는 객체지향적이지 않고 헬퍼의 함수는 간단하고, 절차적이며, 특정한 한가지 일만 하며, 다른 헬퍼함수에 의존하지 않음 $this->load->helper(‘url');
W3 구조 http://hbuilder.com
W3 플러그인 만들기 1 http://hbuilder.com MATCHBOX 적용 (기존 CI구조로는 불가능) Application 디렉터리 이외에 외부 디렉터리에서 CI의 모든 구조를 동일하게 사용할 수 있다. URL체계도 CI와 동일하게 사용 플러그인 디렉터리 (application과 같은 레벨) 플러그인(이름으로 구분) 플러그인 컨트롤러 (MVC 에서 C) 사용자 library나 core 확장 library 모델 위치 (MVC 에서 M) 뷰 위치 (MVC 에서 V) http://hbuilder.com/index.php/board/board/lists /plugins/board/board/lists WIDGET 적용 (기존 CI구조로는 불가능) 컨트롤러에서 다른 컨트롤러를 호출하여 사용 여러 개의 플러그인을 모아 하나의 화면에서 출력하기 위해 사용 plugin::run($plugin, $module_directory, $controller, $function, $skin) CI 기본 구조 플러그인 구조 각종 설정 컨트롤러 위치 (MVC 에서 C) 헬퍼함수(리턴값이 없는) 후킹 프로그램 위치 에러메시지(언어별 셋팅) 사용자 library나 core 확장 library 모델 위치 (MVC 에서 M) 뷰 위치 (MVC 에서 V)
W3 플러그인 만들기 http://hbuilder.com CI 기본 구조 플러그인 구조 플러그인 디렉터리 (application과 같은 레벨) 플러그인(이름으로 구분) 플러그인 컨트롤러 (MVC 에서 C) 사용자 library나 core 확장 library 모델 위치 (MVC 에서 M) 뷰 위치 (MVC 에서 V) CI 와 플러그인의 controller 구조 비교 class Test extends Controller { function Test(){ parent::Controller(); } function index(){ class Test extends Plugin { function __construct(){ $this->CI = & get_instance(); } function run($plugin, $module_directory, $controller, $function, $skin){ 각종 설정 컨트롤러 위치 (MVC 에서 C) 헬퍼함수(리턴값이 없는) 후킹 프로그램 위치 에러메시지(언어별 셋팅) 사용자 library나 core 확장 library 모델 위치 (MVC 에서 M) 뷰 위치 (MVC 에서 V)