컨트롤러 

컨트롤러 는 CController 하거나 CController 를 확장 한 클래스의 인스턴스입니다. 컨트롤러는 사용자가 요청하면 응용 프로그램 객체에 의해 생성됩니다. 컨트롤러는 시작되면 요청 된 작업을 수행하는 데 일반적으로 필요한 모델을 가져와 적절한 뷰를 표시합니다. 액션 은 가장 단순화 된 형태로, 컨트롤러 클래스의 action 로 시작하는 방법입니다.

컨트롤러는 기본 동작 (기본 동작)을 가지고 있습니다. 어떤 작업을 수행하는지 사용자가 지정하지 않으면, 기본 동작이 실행됩니다. 기본적으로 기본 작업 이름은 index 입니다. 이것은 인스턴스의 공용 변수 CController :: defaultAction 설정을 변경할 수 있습니다.

다음 코드는 site 컨트롤러와 index 액션 (기본 동작)와 contact 작업을 정의합니다.

class  SiteController  extends  CController { 
    public  Function  actionIndex ( ) 
    { 
        / / ... 
    }
 
    public  Function  actionContact ( ) 
    { 
        / / ... 
    } }

1. 루트 (경로) 

컨트롤러와 액션은 ID로 식별됩니다. 컨트롤러 ID는 path / to / xyz 형식으로 컨트롤러 클래스 파일protected / controllers / path / to / XyzController.php 에 대응합니다. xyz 를 실제 이름으로 대체 생각하십시오. 예 post 는 protected / controllers / PostController.php 에 해당합니다.) 또한 작업 ID는 액션 메소드 이름에서 접두사 action 을 제외한 것입니다. 예를 들어, 컨트롤러 클래스 actionEdit 라는 메소드가 있으면 작업 ID는 edit 됩니다.

사용자는 루트 (경로)은 특정 컨트롤러와 액션을 요청합니다. 루트는 슬래시는 컨트롤러 ID와 액션 ID를 연결하여 형성됩니다. 예를 들어, 루트 post / edit 는 PostController 의 edit 액션을 참조합니다. 그리고 기본적으로http://hostname/index.php?r=post/edit 라는 URL이 post 컨트롤러와 edit 액션을 요청하는 것입니다.

주의 : 기본적으로 루트는 대소 문자를 구분합니다. 응용 프로그램 초기 구성에서 CUrlManager :: caseSensitive 을 false로 설정하면 대소 문자를 구분하지 않도록 할 수 있습니다. 대소 문자를 구별하지 않는 모드 (case-insensitive mode)의 경우는 컨트롤러 클래스 파일을 포함한 디렉토리 이름이 소문자임을, 또한 controller map 과 action map 모두 키가 소문자임을는 약관을 반드시 지켜주세요.

응용 프로그램 모듈 을 포함 할 수 있습니다. 모듈의 컨트롤러의 액션은 moduleID / controllerID / actionID 형식으로 표시됩니다. 더 자세한 정보는 모듈 의 장을 봐.

2. 컨트롤러의 인스턴스 

컨트롤러의 인스턴스는 CWebApplication 가 들어온 요청을 처리 할 때 생성됩니다. 컨트롤러 ID가 부여되면 응용 프로그램은 다음의 규칙을 사용하여 컨트롤러 클래스와 클래스 파일을 찾습니다.

  • CWebApplication :: catchAllRequest 가 지정되어있는 경우, 컨트롤러는이 속성을 바탕으로 생성되며 사용자 지정된 컨트롤러 ID는 무시됩니다. 이것은 주로 응용 프로그램을 유지 관리 모드로 알림을위한 정적 페이지를 표시하는 데 사용합니다.

  • ID가 CWebApplication :: controllerMap 에 지정되어있는 경우 해당 컨트롤러 설정에 따라 컨트롤러 인스턴스가 생성됩니다.

  • ID가 'path / to / xyz' 형식의 경우, 컨트롤러 클래스 이름은 XyzController 에서 해당 클래스 파일은protected / controllers / path / to / XyzController.php 이라고 가정됩니다. 예를 들어, 컨트롤러 ID가 admin / user 라면, 컨트롤러 클래스 이름이 UserController 에서 클래스 파일이 protected / controllers / admin / UserController.php 됩니다. 만약 클래스 파일이 없으면 404CHttpException 를 호출합니다.

모듈 이 사용되는 경우에는 위의 과정은 약간 다릅니다. 구체적으로는 응용 프로그램 ID가 모듈의 컨트롤러를 참조하고 있는지를 확인하고 만약 그렇다면, 모듈 인스턴스가 처음 생성 된 컨트롤러 인스턴스가 다음 생성됩니다.

3. 액션 

앞서 언급했듯이, 액션은 action 에서 시작하는 이름의 메소드에 의해 정의 할 수 있습니다. 더 진보 된 방법은 액션 클래스를 정의하고 요청시 인스턴스화하도록 컨트롤러에 요청하는 방법입니다. 이 방법을 이용함으로써, 작업의 재사용이 가능하기 때문에보다 재사용 성을 높일 수 있습니다.

새로운 액션 클래스를 정의하기 위해서는 다음과 같이합니다 :

class  UpdateAction  extends  CAction { 
    public  Function  run ( ) 
    { 
        / / 여기에 액션 논리를 작성 
    } }

컨트롤러가이 작업을 인식하도록이 컨트롤러 클래스의 actions () 메서드를 재정의 정의합니다.

class  PostController  extends  CController { 
    public  Function  actions ( ) 
    { 
        return  array ( 
            ' edit ' => ' application.controllers.post.UpdateAction ' ,
         ) ;
     } }

위에서 사용 된, application.controllers.post.UpdateAction 라는 경로는 액션 클래스 파일 protected / controllers / post / UpdateAction.php 경로 별칭입니다.

클래스 기반의 액션을 쓰는 것으로, 모듈 방식으로 응용 프로그램을 구성 할 수 있습니다. 예를 들어, 컨트롤러 코드를 구성하기 위해 다음과 같은 디렉토리 구조를 이용 할 수 있습니다. :

protected /
    controllers /
        PostController.php
        UserController.php
        post /
            CreateAction.php
            ReadAction.php
            UpdateAction.php
        user /
            CreateAction.php
            ListAction.php
            ProfileAction.php
            UpdateAction.php

액션 매개 변수 결합

버전 1.1.4에서 자동 작업 매개 변수 결합이 지원되었습니다. 이것은 컨트롤러 액션 메서드에서 명명 된 매개 변수를 정의하고 그 값이 자동으로 $ _GET에서 할당되는 것입니다.

이것이 어떻게 작동하는지 설명하기 위해 PostController 컨트롤러 create 액션을 기술하는 것을 생각해 봅시다. 이 작업은 두 파라미터를 필요로합니다.

  • category : 카테고리 ID를 의미하는 정수이 위안 새로운 포스트가 생성됩니다.
  • language : 새 포스트가 쓰는 언어 코드를 의미하는 문자열입니다.

필요한 매개 변수 값을 $ _GET 에서 얻기 위해 다음과 같은 하찮은 코드를 작성 지경이 될지도 모릅니다.

class  PostController  extends  CController { 
    public  Function  actionCreate ( ) 
    { 
        if ( isset ( $ _GET [ ' category ' ] ) ) 
            $ category = ( int ) $ _GET [ ' category ' ] ;
         else 
            throw  New  CHttpException ( 404 , ' invalid request ' ) ;
 
        if ( isset ( $ _GET [ ' language ' ] ) ) 
            $ language = $ _GET [ ' language ' ] ;
         else 
            $ language = ' en ' ;
 
        / / ... 재미있는 코드는 여기에서 시작 ... 
    } }

그런데, 액션 매개 변수 기능을 사용하면 작업이 더 재미 있습니다.

class  PostController  extends  CController { 
    public  Function  actionCreate ( $ category , $ language = ' en ' ) 
    { 
        $ category = ( int ) $ category ;
 
        / / ... 재미있는 코드는 여기에서 시작 ... 
    } }

두 매개 변수를 액션 메소드 actionCreate 에 추가 한 것에주의하십시오. 매개 변수 이름은 $ _GET 에서 얻은 매개 변수와 동일하게해야합니다. $ language 매개 변수는 요청이 그러한 매개 변수를 포함하지 않는 경우, 기본값 en 를 취합니다. 한편 $ category 는 기본값이 없기 때문에 요구가 category 매개 변수를 포함하지 않는 경우, CHttpException (error code 400) 오류가 자동으로 발급됩니다.

버전 1.1.5에서 배열 타입의 액션 매개 변수를 지원합니다. 이것은 PHP의 타입 힌팅을 이용하고 있으며, 다음과 같은 문법을 통해 이루어집니다.

class  PostController  extends  CController { 
    public  Function  actionCreate ( array  $ categories ) 
    { 
        / / Yii는 반드시 $ categories를 배열합니다 
    } }

즉, 메소드의 매개 변수 선언에서 $ categories 앞에 array 키워드를 놓습니다. 이렇게하면, $ _GET [ 'categories'] 가 단순한 문자열이면 해당 문자열의 배열로 변환됩니다.

주의 : 만약 매개 변수가 array 타입 힌트없이 선언 된 경우 해당 매개 변수는 스칼라 (배열이 아닌)이 아니면 안됩니다. 이 경우, $ _GET 에서 배열 매개 변수가 전달되면 HTTP 예외가 발생합니다.

버전 1.1.7에서는 자동 매개 결합은 클래스 기반의 작업에도 적용됩니다. 만약 액션 클래스 run () 메소드가 매개 변수와 함께 정의 된 경우, 그 매개 변수는 해당 이름의 요청 매개 변수가 할당됩니다. 예를 들어,

class  UpdateAction  extends  CAction { 
    public  Function  run ( $ id ) 
    { 
        / / $ id는 $ _GET [ 'id']가 할당되는 
    } }

4. 필터 

필터는 컨트롤러의 액션 실행 전이나 후에 (또는 둘 다)에 실행되도록 구성되는 코드 조각입니다. 예를 들어, 액세스 제어 필터는 사용자가 요청한 작업을 수행하기 전에 인증 된 것을 보장하기 위해 사용 될지도 모릅니다. 성능 필터는 작업의 실행 시간을 측정하는 데 사용되는지도 모릅니다.

하나의 작업은 여러 필터를 가질 수 있습니다. 필터는 필터 목록에 등장하는 순서대로 실행됩니다. 필터는 액션과 나머지 실행되지 않은 필터의 실행을 방지 할 수 있습니다.

필터는 컨트롤러 클래스 메소드로 정의 할 수 있습니다. 메소드 명은 반드시 filter 로 시작합니다. 예를 들어,filterAccessControl 메서드는 accessControl 라는 필터를 정의합니다. 필터 방식은 올바른 서명이 있어야합니다 :

public  Function  filterAccessControl ( $ filterChain ) { 
    / / 필터링과 작업을 계속 실행하기 위해 $ filterChain-> run ()을 호출합니다 }

여기서 $ filterChain 는 요청 된 작업에 묶여있는 필터 목록을 나타낸, CFilterChain 인스턴스입니다. 필터 메서드에서 필터링과 액션의 실행을 계속하기 위해서는 $ filterChain-> run ()을 호출합니다.

필터도 CFilter 또는 그 아이 클래스의 인스턴스에 할 수 있습니다. 다음 코드는 새로운 필터 클래스를 정의하는 것입니다 :

class  PerformanceFilter  extends  CFilter { 
    protected  Function  PreFilter ( $ filterChain ) 
    { 
        / / 액션이 실행되기 전에 실행되는 코드 
        return  true ; / / 액션이 실행되어야 않으면 false 
    }
 
    protected  Function  postFilter ( $ filterChain ) 
    { 
        / / 액션이 실행 된 후 실행되는 코드 
    } }

액션을 필터링하기 위해 CController :: filters () 메서드를 재정의해야합니다. 이 메서드는 필터 구성의 배열을 돌려주지 않으면 안됩니다. 예를 들어,

class  PostController  extends  CController {
    ......
    public  Function  filters ( ) 
    { 
        return  array ( 
            ' postOnly + edit, create ' ,
             array ( 
                ' application.filters.PerformanceFilter - edit, create ' ,
                 ' unit ' => ' second ' ,
             ) ,
         ) ;
     } }

위의 코드는 postOnly 과 PerformanceFilter 라는 두 필터를 지정합니다. postOnly 필터는 메소드 기반 필터 (해당 필터 메서드는 이미 CController 에 정의되어 있습니다). 그리고 PerformanceFilter 필터는 객체 기반입니다. application.filters.PerformanceFilter 라는 경로는 필터 클래스 파일 protected / filters / PerformanceFilter 경로의 별칭입니다. 필터 객체의 속성 값을 초기화하기 위해 배열을 사용하여PerformanceFilter 을 구성하고 있습니다. 여기에서는 PerformanceFilter 의 unit 속성을 'second' 에 초기화합니다.

플러스와 마이너스 연산자를 사용하면 작업에 필터 적용할지 여부를 지정할 수 있습니다. 위의 경우 postOnly 는edit 와 create 작업에 적용되어 PerformanceFilter 는 edit 와 create 작업을 제외한 모든 작업에 적용됩니다. 만약, 플러스와 마이너스가 모두 사용되지 않은 경우, 필터는 모든 작업에 적용됩니다.

$model = new EntryForm();
$model->name = 'Qiang';
$model->email = 'bad';
if ($model->validate()) {
    // 성공!
} else {
    // 실패!
    // $model->getErrors() 사용
}



요즘 어벤져스 한국 촬영에 많은 패러디 작품들이 올라와서..


"캡틴 아메리카의 굴욕!!! 한국의 민주화에 동참했었다!!"


사실 윈터솔저 히스토리를 보면 한국전도 참전을 했다는데 역사적 배경에 끼워 맞출려면 이정도 사실감은 있어야 하지 않을까^^?


웃자고 만든거긴 하지만 우리의 과거와 민주주의가 어떻게 이룩되었는지도 한번쯤 생각해 보았으면 좋겠다는 뜻에서...




Ps 사진은 구글링 해서 가져온거에요.. 경향신문의 민주화운동 기념사업회 사진, 어벤져스 사진중

yiiframework 의 The Definitive Guide를 개인적으로 직역 정리한 곳 입니다.

영어전공자도 아니며 영어라 친하지도 않습니다.

그냥 보면서 직영으로 옮겨 놓은것으로 오역이나 잘못된 부분이 있는 경우 알려 주시면 수정하겠습니다.

이 페이지의 원문 : http://www.yiiframework.com/doc/guide/1.1/en/basics.mvc



  1. 일반적인 워크플로우


Yii는 웹 프로그래밍에서 널리 사용되는 모델-뷰-컨트롤러 (MVC) 디자인 패턴을 구현하고 있습니다.

MVC는 사용자 인터페이스를 고려하여 비즈니스 로직을 분리하는 것을 목적으로하고 있습니다.

그래서, 개발자는 다른것에 영향을 주지 않고 쉽게 변경을 할수 있습니다.


MVC에서는 모델(M)은 정보(데이터)와 비즈니스 규칙을 표현하고, 뷰(V)는 폼이나 텍스트와 같은 사용자 인터페이스를 포함, 컨트롤러(C)은 모델과 뷰의 연결을 관리합니다 .

MVC를 구현하는 것 외에도 Yii는 응용 프로그램 이라는 프론트 컨트롤러도 도입하고 있습니다. 이것은 요청을 처리하기 위해 실행 컨텍스트를 캡슐화 한 것입니다. 응용 프로그램은 사용자 요청에 대한 몇 가지 정보를 수집하고, 또한 처리하기 위해 적절한 컨트롤러에 요청을 전달합니다.


다음 그림은 Yii 응용 프로그램의 정적 구조를 보여줍니다.

Static structure of Yii application

Static structure of Yii application

1. 일반적인 워크플로우

다음 그림은 Yii 응용 프로그램이 사용자 요청을 처리 할 때의 일반적인 워크 플로우를 제공합니다.

    Typical workflow of a Yii application

    Typical workflow of a Yii application

    1. 사용자가 URL http://www.example.com/index.php?r=post/show&id=1 따라 요청을 발행합니다.  웹 서버는 부트 스트랩 스크립트 index.php 를 실행하여 요청을 처리합니다.

    2. 부트 스트랩 스크립트는 응용 프로그램 인스턴스를 생성하고 그것을 실행합니다.

    3. 응용 프로그램은 상세한 사용자 요청 정보를 request 라는 응용 프로그램 구성 요소 에서 얻습니다.

    4.  응용 프로그램은 urlManager 라는 응용 프로그램 구성 요소 덕분에 요구되는 컨트롤러 와 액션 을 결정합니다. 이 예에서는 컨트롤러는 post 에서 PostController 클래스를 나타냅니다. 그리고 작업 show 이지만 그 실제 의미는 컨트롤러에 의해 결정됩니다.

    5. 응용 프로그램은 사용자 요청을 계속 처리하기 위해 요청 된 컨트롤러의 인스턴스를 생성합니다.

       컨트롤러는 액션 show 가 컨트롤러 클래스의 actionShow 메소드로 결정합니다.

       그리고 액션에 연결된 필터 (예를 들어 액세스 제어 및 벤치 마크)을 생성하여 실행합니다.

       액션은 필터에 의해 허용 된 경우에만 실행됩니다.

    6. 액션은 ID가 1 인 Post 모델 을 데이터베이스에서 읽습니다.

    7. 액션은 Post 모델을 사용하여 show 라는 뷰 를 표시합니다.

    8. 뷰는 Post 모델의 특성 (속성)을 읽어 봅니다.

    9. 뷰는 여러 위젯 을 실행합니다.

    10. 뷰 그린 결과는 레이아웃 에 포함됩니다.


    yiiframework 의 The Definitive Guide를 개인적으로 직역 정리한 곳 입니다.

    영어전공자도 아니며 영어라 친하지도 않습니다.

    그냥 보면서 직영으로 옮겨 놓은것으로 오역이나 잘못된 부분이 있는 경우 알려 주시면 수정하겠습니다.

    이 페이지의 원문 : http://www.yiiframework.com/doc/guide/1.1/en/quickstart.first-app


    설치

    1. 데이터베이스 연결
    2. CRUD 작업 구현


    Yii의 첫번째 경험을 위해서, 이번 장 에서는 첫번째 Yii Application을 만드는 방법을 설명합니다.

    새로운 Yii Application을 만드는 데 yiic (명령 줄 도구)를 사용하며, 여러 가지 작업을 코드 생성을 자동화하기 위해 Gii (강력한 웹 기반의 코드 생성기)를 사용합니다.

    편의상 YiiRoot 는 Yii를 설치 한 디렉토리로 가정하며, WebRoot은 웹 서버의 문서 루트로합니다.


    명령 줄에서 yiic 을 다음과 같이 실행합니다

    % YiiRoot/framework/yiic webapp WebRoot/testdrive

    Note : Mac OS, 리눅스 나 유닉스에서 yiic을 실행하는 경우, 실행이되도록 yiic 파일의 권한을 변경해야 할 수 도 있습니다. 또는, 다음과 같이 tool을 실행할 수 있습니다.

    % cd WebRoot
    % php YiiRoot/framework/yiic.php webapp testdrive
    


    이렇게 하면 WebRoot/testdrive 아래에 기본 Yii Application이 만들어집니다. 이 Application은 대부분의 Yii Application에 필요한 디렉토리 구조를 가지고 있습니다.


    코드를 한 줄도 쓰지 않아도 웹 브라우저에서 다음 URL을 사용하면 첫 Yii 응용 프로그램을 테스트 할 수 있습니다.

    http://hostname/testdrive/index.php


    화면에서 보듯이 application은 homepage, about, contact, login 의 4 페이지로 구성되어 있는것을 볼수 있습니다.

    연락처 페이지는 사용자가 웹 마스터에게 문의를 입력하여 전송하기위한 폼을 표시합니다.

    로그인 페이지는 사용자가 권한이 필요한 내용에 액세스하기 전에 인증을받는 데 사용됩니다.

    자세한 정보는 아래의 화면 정보보를 보세요.

    Home page

    Home page

    Contact page

    Contact page

    Contact page with input errors

    Contact page with input errors

    Contact page with success message

    Contact page with success message

    Login page

    Login page

    다음은 Application의 디렉토리 구조를 보여줍니다. 자세한 설명은 규칙을 참조하시기 바랍니다.

    testdrive/ index.php Web application entry script file index-test.php entry script file for the functional tests assets/ containing published resource files(생성된 리소스파일 디렉토리) css/  containing CSS files(CSS 파일 디렉토리)

    images/ containing image files(이미지 파일 디렉토리) themes/ containing application themes(테마 파일 디렉토리) protected/ containing protected application files(보호프로그램 파일 디렉토리) yiic yiic command line script for Unix/Linux(리눅스용 yiic 실행 스크립트) yiic.bat yiic command line script for Windows(윈도우용 yiic 실행 스크립트) yiic.php yiic command line PHP script(PHP 실행 스크립트) commands/ containing customized 'yiic' commands(yiic command  디렉토리) shell/ containing customized 'yiic shell' commands(yiic shell 디렉토리) components/ containing reusable user components(컴포넌트 파일) Controller.php the base class for all controller classes(기본 컨트롤러 파일) UserIdentity.php the 'UserIdentity' class used for authentication(인증 파일) config/ containing configuration files(구성파일 폴더) console.php the console application configuration(콘솔 파일) main.php the Web application configuration(웹 메인구성) test.php the configuration for the functional tests(테스트 파일) controllers/ containing controller class files(컨트롤러 클래스 폴더) SiteController.php the default controller class(기본 컨트롤 클래시) data/ containing the sample database(샘플 데이터베이스) schema.mysql.sql the DB schema for the sample MySQL database(샘플 MySQL 데이터베이스 DB스키마) schema.sqlite.sql the DB schema for the sample SQLite database(샘플 SQLite 데이터베이스 DB 스키마 ) testdrive.db the sample SQLite database file(샘플 SQLite 데이터베이스) extensions/ containing third-party extensions(서드 파티 확장 디렉토리) messages/ containing translated messages(메시지 폴더) models/ containing model class files(모델 클래스 파일 폴더) LoginForm.php the form model for 'login' action(login 액션 모델) ContactForm.php the form model for 'contact' action(contact 액션 모델) runtime/ containing temporarily generated files(임시 생성 파일디렉토리) tests/ containing test scripts(테스트 스크립트 디렉토리) views/ containing controller view and layout files(컨트롤 뷰 레이아웃 디렉토리) layouts/ containing layout view files(레이아웃 뷰 파일 폴더) main.php the base layout shared by all pages(기본 페이지) column1.php the layout for pages using a single column(단일 컬럼 페이지 레이아웃) column2.php the layout for pages using two columns(2번째 컬럼 페이지 레이아웃) site/ containing view files for the 'site' controller(site 컨트롤로 뷰 파일 디렉토리) pages/ containing "static" pages(정적페이지 ) about.php the view for the "about" page(about 페이지 뷰) contact.php the view for 'contact' action(contact 페이지 뷰) error.php the view for 'error' action (displaying external errors)(error 페이지 뷰) index.php the view for 'index' action(index 페이지 뷰) login.php the view for 'login' action(login 페이지 뷰)

    위에서 설명한 응용프로그램 생성기는 Git 버전 제어 시스템에 필요한 파일의 작성을 지원합니다.

    다음 명령을 실행하면 필요한 . gitignore (예 assets 과 runtime 내용은 버전 관리해서는 없습니다) 및 . gitkeep (초기 상태가 비어 있지 있더라도 중요한 디렉토리를 강제로 버전 관리하에 두고 있습니다 )을 생성합니다.

    % YiiRoot/framework/yiic webapp WebRoot/testdrive git

    지원되는 또 다른 VCS는 Mercurial입니다. Mercurial을 사용하는 경우, 세 번째 매개 변수로 hg 를 사용하세요. 이 기능은 버전 1.1.11 이상에서 사용할 수 있습니다.


    1. 데이터베이스 연결

    대부분의 웹 응용 프로그램의 뒷면에는 데이터베이스가 있습니다. 우리의 테스트 응용프로그램도 예외는 아닙니다. 

    데이터베이스를 사용하기 위해 우리는 어떻게 연결해야하는지를 알아야 합니다.

    이 작업은 응용 프로그램 구성 파일에서 수행되는 WebRoot/testdrive/protected/config/main.php 를 다음과 같이 수정하여야 합니다.

    return array(
        ......
        'components'=>array(
            ......
            'db'=>array(
                'connectionString'=>'sqlite:protected/data/testdrive.db',
            ),
        ),
        ......
    );

    SQLite database가 필요 할때 WebRoot/testdrive/protected/data/testdrive.db 에 연결하여 yii 를 구성할수 있습니다.

    이 SQLite 데이터베이스는 방금 기초 응용 프로그램에 이미 포함되어 있다는것을 기억하시고, 이 데이터 베이스는 tbl_user라는 하나의 테이블만 구성하고 있습니다.

    CREATE  TABLE  tbl_user  ( 
        ID  INTEGER  NOT  NULL  PRIMARY  KEY  AutoIncrement ,
         username  VARCHAR ( 128 )  NOT  NULL ,
         Password  VARCHAR ( 128 )  NOT  NULL ,
         Email  VARCHAR ( 128 )  NOT  NULL ) ; 

    만약 MySQL 데이터베이스를 사용하기 원한다면, 함께 제공되는 MySql 스키마 파일 WebRoot/testdrive/protected/data/schema.mysql.sql 을 사용하여 데이터 베이스를 만들수 있습니다. 

    주의 : Yii 의 데이터베디으 기능을 사용하기 위해서느 PHP PDO 확장 및 PDO 관련 드라이버를 활성화 해야 합니다. test-drive 응용 프로그램에서는 php_pdo와

    php_pdo_sqlite이 확장 활성화 되어 야 합니다.


    2. CRUD 작업구현

    지금부터 흥미로운 부분입니다. 우리는 방금 만든 tbl_user 테이블에 CRUD(Create 생성, Read 읽기, Update 수정, Delete 삭제)작업을 구현할것입니다. 이것은 실제 응용프로그램에서 공종적으로 필요한 기능입니다. 실제로 코드를 작성하는 수고를 는 대신, 강력한 웹 기반 코드 생성기를 위해서 생성합니다. 즉 Gii 를 사용합니다.

    정보 : Gii는 버전 1.1.2부터 사용할수 있습니다. 그이전에는 Yiic 툴을 사용하여 동일한 작업을 구현했습니다. 자세한 내용은 명령줄 도구를 사용하여 코드를 생성하는

    방법을 참조 하세요.


    Gii 구성

    Gii를 사용하기 위해 먼저 WebRoot/testdrive/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',
            ),
        ),
    );

    그런 다음 브라우저에서 URL http://hostname/testdrive/index.php?r=gii 에 액세스합니다. 암호를 요청하는데 위의 파일에서 암호를 입력하시면 됩니다.


    User 모델을 생성

    로그인후 Model Generator의 링크를 클릭합니다. 그러면 아래와 같은 모델 생성 페이지로 이동합니다.

    Model Generator

    Model Generator

    Table Name 필드에 tbl_user 를 입력합니다. Model Class 필드에 User 를 입력합니다. 그리고 Preview 버튼을 누르면 새로 생성 된 코드 파일을 볼 수 있습니다. 자, Generate 버튼을 누르세요. User.php 라는 새 파일이protected / models 아래에 생성됩니다. 나중에이 설명서에서 설명한대로이 User 모델 클래스는 그 하위 구성 데이터베이스 tbl_user 테이블과 객체 지향의 방식으로 연결 할 수 있습니다.


    Crud 코드 생성User 모델을 생성

     Model Class 파일을 생성 한 후 사용자 데이터에 대한 CRUD 작업을 구현하는 코드를 생성합니다. 아래 그림과 같이 Gii 에서 Crud Generator를  선택합니다.

    CRUD Generator

    CRUD Generator

    Model Class 필드에 User 를 입력합니다. Controller ID 필드는 user (소문자)을 입력합니다. 그리고Preview 버튼을 누른 후 Generate 버튼을 누릅니다. 이제 CRUD 코드 생성을 완료했습니다.


    Crud 페이지에 접속

    아래의 URL을 부라우저에서 실행해 보세요.

    http://hostname/testdrive/index.php?r=user

    이 페이지는 tbl_user 테이블의 사용자 항목 목록을 표시합니다.

    Create User 링크를 클릭 해보세요. 만약 로그인 전이라면 로그인 페이지로 이동합니다. 로그인 후 새로운 사용자를 추가하는 입력 양식이 나타납니다. 입력을 완료하고 Create 버튼을 클릭 하세요. 뭔가 입력에 오류가있는 경우 친절하게 오류 메시지가 표시되고, 입력 내용이 저장되지 않게 막아 줍니다.. 사용자 목록으로 돌아 가면 새로 추가 된 사용자를 목록에서 볼 수있을 것입니다.

    위의 단계를 반복하여 사용자를 많이 추가보세요. 1 페이지에 표시되는 내용이 많은경우, 자동으로 페이징 처리가 만들어 집니다.

    admin / admin 을 사용하여 관리자로 로그인하면 다음 URL을 통해 사용자 관리 페이지를 볼 수 있습니다.

    http://hostname/testdrive/index.php?r=user/admin

    이페에지는 사용자의 목록을 페이블 형식으로 표시합니다. 테이블의 헤더셀을 클릭하면 해당 열이 정렬이 됩니다.

    또한 데이터 행에있는 버튼을 클릭하면 해당 행을 검색, 업데이트 또는 삭제 할 수 있습니다. 다른 페이지로 이동할 수도 있습니다. 

    이 모든 좋은 기능을 단 한 줄의 코드도 작성도 필요하지 않습니다.

    User admin page

    User admin page

    Create new user page

    Create new user page


    1. 박영수 2013.12.20 16:16 신고

      명령어를 cmd로 이용중인데 어떻게 해야하는지 모르겠네요
      ftp를 이용해서 카페24호스팅에서 파일을 www/yii폴더에 넣고 환경은 확인했는데
      그후 cmd를 이용해서 뭘어떻게 해야하는지...참 ...

    + Recent posts

    티스토리 툴바