본문 바로가기

Yii Framework/Guide to Yii 1.0

04. 첫 번째 Yii Application 만들기

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