본문 바로가기

Yii Framework/블로그 만들기

06. 스케폴딩

이 곳은 제가 개인적으로 YII framework의 블로그 만들기를 번역해 놓은 곳입니다.

제가 영어 전공자도.. 그렇다고 영어랑 친하지도 않습니다. 

그래서 보시면 뭔가 글도 엉성하고 말이 안맞는게 많습니다.

잘못 오역된 부분이라던지 그런 부분들 친절하게 알려주시면 바로 수정하겠습니다.

이 페지의 원글 http://www.yiiframework.com/doc/blog/1.1/en/prototype.scaffold



스캐폴딩

생성(Create), 읽기(Read), 업데이트(Update), 삭제(Delete)는 이른바 CRUD 응용 프로그램에서 데이터 개체에 대한 4가지의
기본 작업입니다. CRUD를 구현하는 일은 웹 응용 프로그램을 개발 할 때 일반적입니다. 따라서이 CRUD 작업을 구현하는 프로세스 (scaffolding:발판; 발판 재료
)를 자동화하기 위해 Yii는 Gii 라는 이름 아래에 몇 가지 코드 생성 도구를 제공합니다.

주의: Gii 는 버전 1.1.2에서 사용 할 수 있습니다. 그 전까지는 이 목적을 위해  yiic 쉘 도구를 사용 해야 했습니다.

다음은, 블로그 응용 프로그램의 게시물과 댓글에 대한 작업 CRUD 구현하기 위해 이 도구를 사용하는 방법에 대해 설명합니다.

1.  Gii 설치
우리는 첫번째로 Gii를 설치하여야 합니다. 
/wwwroot/blog/protected/config/main.php 파일을 열고 다음 코드를 추가 하세요.

return array(
    ......
    'import'=>array(
        'application.models.*',
        'application.components.*',
    ),
 
    'modules'=>array(
        'gii'=>array(
            'class'=>'system.gii.GiiModule',
            'password'=>'pick up a password here',
        ),
    ),
);

위의 코드가 gii 라는 이름의 모듈을 설치합니다. 이는 다음의 URL을 브라우저에 입력 Gii 모듈에 액세스 할 수있게 합니다.

http://www.example.com/blog/index.php?r=gii

암호를 입력하라는 메시지가 화면에 표시 됩니다. /wwwroot/blog/protected/config/main.php에서 미리 설정해 놓은 암호를 입력하세요. 그러면 사용 가능한 모든 코드 생성 도구가 나열된 페이지가 표시됩니다.

주의: 실제 운영 시스템에서 실행중인 경우 위의 코드를 삭제해야합니다. 코드 생성 도구는 개발 컴퓨터에서 사용되어야합니다.

2. 모델만들기
먼저, 각각의 데이터베이스 테이블에 모델 클래스를 작성해야합니다. 이 튜토리얼을 읽어 가면 알 수 있듯이 모델 클래스에서 직관적 인 객체 지향 방식으로 데이터베이스에 액세스 할 수있게합니다. 

Model Generator 링크를 클릭하여 모델 생성 도구의 사용을 시작 하세요.

Model Generator 페이지에서 Table Name 필드에 tbl_user (사용자 테이블 이름), Table Prefix 필드에tbl_ 입력하고 Preview 버튼을 누릅니다. 그러면 미리 생성한 테이블이 나타납니다. 테이블의 링크를 클릭하면 생성 된 코드를 미리 볼 수 있습니다. 모든 게 괜찮은 경우, 코드를 생성하고 저장 버튼을 눌러 파일을 생성 할 수 있습니다.

정보: 코드생성기는 생성 된 코드를 파일에 저장해야 하기 때문에 웹 프로세스가 해당 파일을 생성, 갱신할수
있는 권한이 필요합니다. 빠른 방법으로는 /wwwroot/blog 디렉토리 전체를 웹 프로세스에서 쓰기 가능하게 해도
상관은 없습니다. 그러니 이것은 개발 머신으로 Gii를 사용하는 경우에만 필요하다는 것을 주의 하세요.

tbl_post, tbl_comment, tbl_tag와 tbl_lookup을 포함하여 데이터베이스 테이블의 나머지 부분에 대해 동일한 단계를 반복합니다.

팁: Table Name 필드에 별표 '*' 를 입력 할수 있씁니다. 따라서 한번에 모든 데이터베이스 테이블의 모델 클래스가 생성됩니다.

이 단계에서 다음의 파일들이 생성되어 있습니다

  • models/User.php 는 CActiveRecord 을 상속하는 User 클래스를 포함합니다. 이 클래스는 tbl_user 데이터베이스 테이블에 액세스하는 데 사용됩니다.
  • models/Post.php 는 CActiveRecord 을 상속 Post 클래스를 포함합니다. 이 클래스는 tbl_post 데이터베이스 테이블에 액세스하는 데 사용됩니다.
  • models/Tag.php 는 CActiveRecord 을 상속 Tag 클래스를 포함합니다. 이 클래스는 tbl_tag 데이터베이스 테이블에 액세스하는 데 사용됩니다.
  • models/Comment.php 는 CActiveRecord 을 상속 Comment 클래스를 포함합니다. 이 클래스는tbl_comment 데이터베이스 테이블에 액세스하는 데 사용됩니다.
  • models/Lookup.php 는 CActiveRecord 을 상속 Lookup 클래스를 포함합니다. 이 클래스는 tbl_lookup데이터베이스 테이블에 액세스하는 데 사용됩니다.

3. CRUD 구현 작업
모델 클래스가 생성 된 후에는이 모델에 CRUD 작업을 구현하는 코드를 생성하는 Crud Generator 를 사용할 수 있습니다. Post 와 Comment 모델에 대해 이를 실행 합니다.

Crud Generator 페이지에서 Model Class 필드에 Post(우리가 방금 만든 후 모델 클래스의 이름)을 입력하고Preview 버튼을 누릅니다. 우리는 많은 파일이 생성된다는 것을 알 수 있습니다. Generate 버튼을 눌러 그 파일들을 생성합니다.

Comment 모델에 대해 같은 과정을 반복합니다.

CRUD 생성기에서 생성 된 파일을 살펴 보자. 모든 파일은 /wwwroot/blog/protected 아래 생성됩니다.편의상 그 파일을 컨트롤러 파일과 뷰 파일로 분류합니다.

  • 컨트롤파일
    • controllers/PostController.php 는 PostController 클래스를 포함합니다. 이 컨트롤러는게시글의 CRUD 작업을 담당합니다
    • controllers/CommentController.php 는 CommentController 클래스를 포함합니다. 이 컨트롤러는 댓글 CRUD 작업을 담당합니다.
  • 뷰파일
    • views/post/create.php 는 새로운 게시물을 만들수 있는 HTML양식을 표시는 뷰 파일 입니다.
    • views/post/update.php 는 기존 게시시물을 업데이트 하는 HTML 양식을 표시는 뷰 파일입니다.
    • views/post/view.php 는 게시물에 대한 자세한 정보를 표시하는 뷰 파일입니다.
    • views/post/index.php 는 게시물의 목록을 표시하는 뷰 파일입니다.
    • views/post/admin.php 는 관리 명령과 함께 표 형식으로 문서를 표시하는 뷰 파일입니다.
    • views/post/_form.php 는 부분 뷰 파일이며 views/post/create.php 과 views/post/update.php 에 포함됩니다. 이것은 문서 정보를 입력하는 HTML 양식을 표시합니다.
    • views/post/_view.php 는 부분 뷰 파일이며 views/post/index.php 에서 사용됩니다. 이것은 하나의 게시물의 간단한보기를 표시합니다.
    • views/post/_search.php 는 부분 뷰 파일이며 views/post/admin.php 에서 사용됩니다.검색 폼을 표시합니다.
    • a similar set of view files are also generated for comment.

4. 테스팅
다음 URL에 액세스하여 방금 생성 한 코드를 테스트 할 수 있습니다.
http://www.example.com/blog/index.php?r=post
http://www.example.com/blog/index.php?r=comment

생성 된 코드로 구현 된 게시물과 댓글 기능이 서로 완전히 독립적임을 확인합니다. 자동 생성 된 코드의 기사와 댓글 기능은 서로 완전히 독립적으로있는 것에주의하십시오. 또한 새로운 게시물이나 코멘트를 만들 때, author_id 나 create_time 정보를 입력하도록 요구합니다. 이 정보는 실제 응용 프로그램에서 프로그래밍 방식으로 설정 될 것입니다. 하지만 걱정할 것은 없습니다. 다음 milestones에서 이러한 문제를 해결합니다. 지금은 프로토 타입이 블로그 애플리케이션에 필요한 거의 모든 기능구현하는데 대부분의 기능을 포함하고 있으므로, 우리는 매우 만족해야 합니다.

위 파일이 어떻게 사용되는지를 잘 이해하기 위해 블로그 응용 프로그램에서 문서의 목록이 표시되는 경우의 흐름을 보여줍니다.

  1. 사용자가 URL http://www.example.com/blog/index.php?r=post 을 요청합니다.
  2. 항목 스크립트는 요청을 처리 할 응용 프로그램 인스턴스를 생성하고 초기화 웹 서버에 의해 실행됩니다.
  3. 응용 프로그램은 PostController 의 인스턴스를 생성하고 실행합니다.
  4. PostController 인스턴스는 actionIndex () 메서드를 호출하여 색인 작업을 실행합니다. 사용자가 URL에 실행할 작업을 지정하지 않는 경우 인덱스가 기본 동작 되오니, 주의 하세요.
  5. actionIndex () 메소드는 데이터베이스에 질의를하고, 최근의 게시물 목록을 검색합니다.
  6. actionIndex () 메소드는 게시물 데이터 뷰를 랜더링 합니다.