기존의 정의된 테이블을 CakePHP의 convention 에 따르도록 변경
각 테이블에 id 라는 필드를 부여해야 하고, foreign_key의 경우엔 테이블_id 형태로 바꾸어 준다.
다음의 모델 정의 ( 게시판은 복잡해서 나중에..)
CakePHP는 RubyOnRails의 인기에 힘입어, 아주 비슷한 구조와 아이디어를 php에서 구현해보자고는 취지에서 만들어진 프레임워크이다. 제대로된 PHP 프레임워크가 별로 없는 것이 현실인데, 몇년전쯤 KWEB 후배들과 우리도 Framework를 공부해 보자면, 잠깐 Symphony를 소개한 적이 있다. 이전의 주류는 Zend였으나, Symphony, CakePHP가 차례로 릴리즈 되었다. 인터넷에서 우연히 찾아낸 최근 인기도 그래프는 다음과 같다.
![cake.png cake.png](https://img1.daumcdn.net/relay/cafe/original/?fname=http%3A%2F%2Fsewan.springnote.com%2Fpages%2F443760%2Fattachments%2F186888)
마지막 순위에서, cakePHP, symphony, zend, code igniter 순이고, 2006년 중간에 끊어진 그래프가 mojavi를 의미한다. 2006년에 나온 CakePHP가 막 치고 올라가더니, PHP 프레임워크중에 단연 1위!
Framework에 관심을 가지게 된 이유는 2002~2005년 병특 근무중에 반은 Java 서버 프로그래밍이었고, 반은 JSP 웹 프로그래밍이었는데, 당시 내가 개발하던 프로그램과 모듈은 간단힌 기능의 프로그램( 서버 관리자 화면, 모니터, 통계 등 ) 이어서 Framework의 필요성을 못느끼고 있었으나, 대부분의 프로젝트에서 Web Application Server와 더불어 MVC를 기반으로 하는 프레임워크 도입이 한창이었다. 그때의 한창 시작된 Java 웹 프레임워크가 Struts였고, 최근 기사에서는 Struts는 복잡해서 제대로 이해하지 못하는 사람들이 많아서, 좀더 심플한 Spring 프레임워크로 옮겨오고 있다고 한다.
현재 CakePHP Tutorial을 따라서 블로그 만들기 해보고 잇는데, RubyOnRails와 구조나 개발 방법이 비슷해서 쉽게 따라가고 있는데, 프레임워크 전제가 항상 웹서버 루트에 Cake를 설치하는 것으로 설명이 되어서, Kweb 서버의 내 계정에 설치하고 프로그래밍하니,URL이 제대로 표시되지 않는 문제가 발생한다.
이와 관련된지 모르겟으나, Cake를 공부하다가 보니 설정에서 Mod_rewrite 모듈을 Apache에 꼭 설정해주어야 한다고 하는데, 이 부분은 그 전에 태터툴즈 설치때도 반드시 설정해주어야한다고 본 것 같다. 이해없이 그냥 따라서 설치만하고 문제 없이 태터를 운영했는데 이번에 Mod_rewrite가 정확히 뭐하는 모듈인지 알아봐야겟다.
URL 이 제대로 표시되지 않는 부분에 관해서 아파치의 Mod_rewrite 와 각 웹 폴더의 .htaccess(접근 권한 및 액세스 처리에 관한 정의) 를 제대로 설정해주어야 하는데, 이부분에 대해서 Tutorial 설명부분에서 자세히 다뤄지지 않았고, CakePHP 한국 개발자 커뮤니티(http://cakephp.co.kr, 생긴지 정말 얼마안됨. 위의 해결하지 못하는 부분을 문의하러 접속했던 날 생성된 커뮤니티) 에 문의해서 manual 을 다시 확인 한 후, 해결했다. root, model, view 각 폴더의 .htaccess 를 모두 알맞게 설정해주어야 하는데, blog tutorial 을 따라 하다가 root 만 설정해 주었다.
이 설정에서 조금 버벅된 부분은 RoR과 비교되는 부분으로 RoR 의 경우 자체 웹서버(WebBrick)을 포함하고 있음에 따라, 설정할 부분인 거의 없는데, CakePHP는 아직은 복잡한 apache 를 이용함으로써 필요한 부분을 다소 까다롭게 설정해주는 부분이 있다.( 몇일 사이에 RoR의 설정보다는 관습.. 에 너무 익숙해져 있나보다. )
구현하는 방법은 RoR 과 아주 비슷했다. OOP 기법으로 PHP 를 이용해서 Controller를 AppController를 상속받아서 구현하고, 각 action을 정의한다.
<?php
class PostsController extends AppController
{
var $name = 'Posts';
function index()
{
$this->set('posts',$this->Post->findAll());
}
...
모델도 , AppModel 을 상속해서 class로 만들어 준다.
<?php
class Post extends AppModel
{
var $name = 'Post';
var $validate = array(
'title' => VALID_NOT_EMPTY,
'body' => VALID_NOT_EMPTY
);
}
?>
그리고 각 view를 thtml 형태로 구현해 주면 끝.
swyun99@ubuntu:~/public_html/app/views/posts$ ls -al
total 24
drwxr-xr-x 2 swyun99 swyun99 4096 2007-07-26 20:02 .
drwxr-xr-x 8 swyun99 swyun99 4096 2007-07-25 13:54 ..
-rw-r--r-- 1 swyun99 swyun99 448 2007-07-25 14:06 add.thtml
-rw-r--r-- 1 swyun99 swyun99 495 2007-07-25 14:15 edit.thtml
-rw-r--r-- 1 swyun99 swyun99 736 2007-07-26 20:02 index.thtml
-rw-r--r-- 1 swyun99 swyun99 159 2007-07-25 13:59 view.thtml
swyun99@ubuntu:~/public_html/app/views/posts$
기능
공식 홈페이지에 언급된 기능으로는
![feature.png feature.png](https://img1.daumcdn.net/relay/cafe/original/?fname=http%3A%2F%2Fsewan.springnote.com%2Fpages%2F443760%2Fattachments%2F186889)
가 있다.
RoR의 대부분 기능들 CRUD , MVC, AJAX 구현, scaffold 등 모두 들어있는 듯 하지만, Blog Tutorial 로 다 경험할 수는 없었고, scaffold 페이지 생성은 Bake 라는 별도의 라이브러리를 이용해야 하는 것 처럼 보인다.
ToDo
UTF-8 을 기본 설정으로 구현할 수 있을 듯한데, 다른 언어셋에 대해서 구현 가능한지 의문이다. 현재 많은 웹페이지들이 euc-kr로 개발되어있고, 웹서버, DBMS또한 설치되어 있는 상황에서 UTF-8만 지원된다면 개발 프로임워크로서 선택이 꽤나 제한되리라 생각된다.
화구회 홈페이지에 cake blog tutorial을 옮기고 한글 입력해보았더니 정상적으로 돌아간다. 화구회 홈페이지 리뉴얼에 이용할 예정임
화구회 홈페이지 작업
모델 재 정의
기존의 정의된 테이블을 CakePHP의 convention 에 따르도록 변경
각 테이블에 id 라는 필드를 부여해야 하고, foreign_key의 경우엔 테이블_id 형태로 바꾸어 준다.
다음의 모델 정의 ( 게시판은 복잡해서 나중에..)
photo_comment 의 경우
- M (photo_comment.php, PhotoComment class), C는 (photo_comments_controller.php, PhotoCommentsController class), Http Request 때는 photo_comments 로 호출했으나 에러
스켈렉톤 controller 작성
각 모델의 CRUD를 처리하는 controller 를 작성하고, scaffold를 달아주어서 스켈렉톤 형식으로 CRUD를 처리함
Schedule 모델 구현
Schedule 모델의 scaffold를 지우고, 직접 View page들을 작성하고, controller를 수정해서 tranaction이 수행되도록한다.
index
![cakeindex.JPG cakeindex.JPG](https://img1.daumcdn.net/relay/cafe/original/?fname=http%3A%2F%2Fsewan.springnote.com%2Fpages%2F443760%2Fattachments%2F186922)
edit
![cakeedit.JPG cakeedit.JPG](https://img1.daumcdn.net/relay/cafe/original/?fname=http%3A%2F%2Fsewan.springnote.com%2Fpages%2F443760%2Fattachments%2F186923)
delete
![delete.JPG delete.JPG](https://img1.daumcdn.net/relay/cafe/original/?fname=http%3A%2F%2Fsewan.springnote.com%2Fpages%2F443760%2Fattachments%2F186925)
펌 : http://sewan.springnote.com/pages/443760
Last edited on Aug 30, 2007 12:54 by sewan