먼저 좋은 점은 가볍다 입니다. 확장도 용이하구요.
사용자들이 올려놓은 wiki의 파일이나 플러그인이 이용할만한게 많습니다.
다른 프레임워크도 그렇지만 지원되는 함수(유저가이드 참고)가 정말 필요한 것들을 집약해놓았습니다.
jquery를 이그나이터의 함수처럼 사용하는 부분도 있고.
폼체크, 페이징, 트랙백, xml, 세션 암호화 등등.. 유저 가이드 대로만 하면 금방 구현. ^^
helper도 마찬가지구요.
모델의 경우 다른 컨트롤을 위해 만든 모델도 로딩시켜서 그냥 쓸 수 있다는거..
common 모델을 만들고 기능별로 따로 만들어서 불러서 쓰는 것이 좋겠죠.
모델에서 데이터 처리후 배열로 뷰파일에 전달, foreach(){ .. }로 처리하기만 하면 되는 뷰.
MVC패턴의 장점이야 두말할 나위가 없구요.
단점으로는 모든 프레임워크가 그렇듯 사용법을 따로 배워야 하죠.
$_POST[‘var’] 로 처리하던 것만 하더라도 $this->input->post(‘var’)로 바꿔서 사용해야 합니다.
$_SERVER 도 마찬가지..
http://www.h.com/index.php/together/mview/index/ 의 주소체계를 사용하다보면 검색후 2페이지로 이동할때 검색어를
http://www.h.com/index.php/together/mview/index/10/검색어 (검색어 부분은 실제로는 urlencode해서 넘깁니다.)의 형태로 넘기게 되는데
간혹 중간에 프로그램 수정에 의해 인자가 추가되는 경우가 있으면 좀 난감해집니다.
그래서 코드이그나이터 포럼에 검색을 해보니 쿠키로 처리하는 경우도 있었고 config.php 파일에서 $config[‘enable_query_strings’] 를 TRUE로 셋팅하여
주소체계를 혼용하여 사용하면 해결이 가능하긴 하지만 그렇게 되면 또 한가지 문제가 생깁니다.
$config[‘enable_query_strings’] = TRUE; –> http://www.h.com/index.php?d=together&c=mview&m=index&page=10&q=검색어 형태의 주소로 사용할 수 있습니다.
이렇게 되면 해결이 되는데 문제는 코드이그나이터의 pagenation 라이브러리 사용에서 문제가 생깁니다.
기존형식으로 사용할때는 잘 작동하던 페이징이 $config[‘enable_query_strings’] = TRUE 가 되면 페이징의 주소가 기존과 다른 형태로 바뀌면서 오작동을 합니다.
그래서 pagenation config 선언할때 한줄을 더 추가해줘야 합니다.
$config[‘page_query_string’] = FALSE; 이 라인이 추가 되어야 문제없이 사용이 됩니다.
설명이 좀 어려운데 실제로 코딩해보시면 이해가 금방 됩니다. ^^;
전 두가지 방법을 다 적용했습니다. 쿠키로 구워서 체크후 일정시간후 날리는 방법과 주소형태를 바꾸는 방법.
그리고 1.7.1 버전에서는 고쳐졌는지 확인을 안해봤는데 제가 사용했던 1.6.3 버전에서는 로그인후 창을 닫으면 세션이 그대로 살아있습니다. 수정하려면 아래 부분 패치
libraries 디렉토리의 Session.php 89 라인
if ($this->sess_expiration == 0)
{
$this->sess_expiration = (60*60*24*365*2);
}
을
if ($this->sess_expiration == 0)
{
$this->sess_expiration = (60*60*24*365*2);
}
else
{
$this->sess_expiration = (60*60*24);
}
로 수정
659라인
setcookie(
$this->sess_cookie_name,
$cookie_data,
– //$this->sess_expiration + time(),
+ ($this->CI->config->item(‘sess_expiration’) == -1) ? 0 : ($this->sess_expiration + time()),
$this->cookie_path,
$this->cookie_domain,
0
);
config.php 파일의 $config[‘permitted_uri_chars’] = ‘a-z 0-9~%.:_=\-‘; 부분도 문제가 됩니다.
주소로 사용할 수 있는 문자를 정규표현식으로 표현한 것이데 간혹 한글을 주소에 사용하기위해 urlencode 했을때 충돌이 납니다.
경우의 수를 다 찾아서 넣어주면 좋겠지만 전 현재 $config[‘permitted_uri_chars’] = ”; 이렇게 사용중입니다.
일단 생각 나는 부분은 여기까지인데 추후에 더 보강하겠습니다. ^^
[태그:] PHP FREAMEWORK CODEIGNITER
PHP FRAMEWORK CODEIGNITER 기본 디렉토리 설명
PHP FREAMEWORK CODEIGNITER 기본 형태
application 디렉토리 하단의 controllers 디렉토리가 컨트롤의 역할을, views 디렉토리는 뷰의 역할을, models 디렉토리는 모델의 역할을 한다.
서브 디렉토리 형태로 사용할 수 있으며, 기능별 혹은 프로그램 그룹별로 디렉토리를 나누어 이용할 수 있다.
(예 http://localhost/index.php/blog/ -> 블로그, http://localhost/index.php/blog/index 도 동일한 결과이다
기본이 되는 index 함수는 생략가능. 그러나 index 뒤에 인자를 준다면 써줘야 한다)
컨트롤의 경우에는 디렉토리를 나누지 않고 controllers 디렉토리에 위치시키는 것도 괜찮다.
작업해보니 각 프로그램 그룹별(블로그, 포토갤러리 등) 컨트롤 프로그램은 1개, 혹은 2개 정도였고
많더라도 대여섯개 정도인데 굳이 디렉토리를 나눌 필요까지는 없을 듯 하다. (나눠도 상관은 없다. ^^;)
모델과 뷰의 경우에는 꼭 컨트롤과 짝이 되는 모델과 뷰를 사용하지 않아도 된다.
위 그림의 예에서 보면 컨트롤에서
자주 쓰는 공통 기능은 공통 모델파일로 따로 만들어놓는 것이 편하다.
컨트롤에서 모델에서 데이터를 가져오고(혹은 가공하고) 뷰로 넘길때는 배열형태로 넘긴다.
$data[‘page_title‘] = ‘Your title‘;
$this->load->model(‘blog_model‘); // 모델을 선언
$this->load->view(‘common/top’); // 뷰 파일 선언. 데이터 넘길 필요가 없는 경우
$data[‘query’] = $this->blog_model->get_last_ten_entries(); // 모델에서 데이터를 가져옴(배열)
$this->load->view(‘blogview‘, $data); // blogview.php 뷰파일을 로딩한다.
// $data변수로 배열을 넘김
// 뷰파일에서는 첫줄 $data[‘page_title‘]의 경우에는
// $page_title 로 사용한다.
// $data[‘query’]는 배열로 넘긴것이라 foreach를 이용
통 프레임의 경우 상하단 include 시키는 파일은 컨트롤에서 위의 예문처럼 선언하거나
뷰파일 상단에 <? echo $this->load->view(‘top’); ?> 이렇게 선언해도 된다.