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

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

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

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

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



요구 분석

앞으로 만들 블로그 시스템은 단일 사용자 시스템입니다. 시스템의 소유자는 다음 조치를 수행 할 것입니다 :

  • 로그인 및 로그 아웃
  • 기사 작성, 업데이트 및 삭제
  • 기사 공개, 비공개, 보관
  • 댓글 승인 제거


소유자 이외의 사용자는 모든 게스트 게스트는 다음 조치를 수행 할 것입니다 :

  • 읽기
  • 댓글 달기

이 시스템의 추가 요구에는 다음 사항이 포함됩니다 :

  • 시스템의 홈페이지는 최근 기사 목록을 표시한다.
  • 페이지에 10 개 이상의 기사가있는 경우 여러 페이지에 표시된다.
  • 기사와 그 기사의 댓글을 함께 표시한다.
  • 특정 태그가있는 문서의 목록을 볼 수 있습니다.
  • 태그 사용 빈도를 나타내는 태그 클라우드보기
  • 최근의 코멘트를 나열합니다.
  • 테마는 변경 가능하다.
  • SEO-friendly URLs 을 사용합니다.


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

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

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

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

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



전체 설계

요구 분석을 바탕으로, 블로그 어플리케이션에서 데이터를 저장하기 위해서 다음의 데이터베이스 테이블을 사용합니다.

  • tbl_user 는 사용자 이름, 암호 등 사용자 정보를 저장합니다.
  • tbl_post 기사 정보를 저장합니다. 주로 다음 컬럼으로 구성되어 있습니다 :
    • title : 필수, 기사 제목
    • content : 필수, Markdown 형식 으로 작성된 문서의 본문
    • status : 필수, 게시물의 상태  (공개 여부) . 다음중 하나의 값을 사용함
      • 1, 게시물이 초안에 있으며 공개되지 않은 게시물 입니다.
      • 2, 공개된 게시물입니다.
      • 3, 게시기간이 지난 게시물이며, 목록에는 나타나지 않습니다(그렇지만, 개별적으로 계속 엑세스 할수 있습니다)
    • tags : 옵션, 단어를 쉼표구분 하여 카테고리화 하는 것입니다.

  •  tbl_comment 게시물의 댓글 정보를 저장합니다. 각 코멘트는 게시말과 관련된 주로 다음과 같은 항목으로 구성되어
    있습니다. :
    • author : 필수, 댓글 작성자 이름
    • email : 필수, 댓글 작성자의 이메일 주소
    • url : 옵션, 댓글 작성자의 웹 사이트의 URL
    • content : 필수, 일반 텍스트로 된 댓글의 내용
    • status : 필수, 코멘트 상태 (공개 여부). 코멘트가 승인 인경우 (value 2) 또는 승인이 아닌경우 (value 1) 입니다.

  • tbl_tag 는 태그 클라우드 기능을 구현하기 위해 필요한 문서의 태그 빈도 정보를 저장합니다. 이 테이블은 주로 다음 컬럼으로 구성되어 있습니다 :
    • name : 필수, 고유한 대크이름
    • frequency : 필수, 태그가 기사에 나오는 횟수

  • tbl_lookup 는 일반 조회 정보를 저장합니다. 이것은 본질적으로 정수와 텍스트의 매핑입니다. 전자는 코드의 데이터 표현이며, 후자는 해당 최종 사용자를위한 표현입니다. 예를 들어, 정수 값 1을 기사가 초안임을 나타내는 것으로 사용하지만, 사용자에게 표시 할 텍스트는 기본 입니다. 이 테이블은 주로 다음 컬럼으로 구성되어 있습니다 :
    • name : 데이터 항목의 텍스트 표현 (최종 사용자를위한 표시)
    • code : 데이터 항목의 정수 표현
    • type : 데이터 항목 형식
    • position : 동일한 유형의 데이터 항목에서의 상대적인 정렬

다음 entity-relation (ER) 다이어그램 은 테이블 구조와 위의 테이블에 대한 관계를 나타냅니다.

Entity-Relation Diagram of the Blog Database

Entity-Relation Diagram of the Blog Database

위의 ER 다이어그램에 해당하는 전체 SQL 문은 블로그 데모에서 찾을 수 있습니다.

정보: 다른 DBMS는  대소문자에 민감하여 종종 문제가 발생하기 때문에, 테이블 이름과 컬럼 이름은 모두 소문자로 명명합니다.

동시에, 모든 테이블에 tbl_ 라는 접두사를 붙이고 있습니다. 여기에는 두 가지 목적이 있습니다. 첫째, 동일한 데이터베이스에서 다른 테이블과 공존해야 할 때 접두사 테이블에 네임 스페이스를 도입하는 것이 해결책입니다. 이것은 공유 호스팅 환경에서 여러 응용 프로그램을 단일 데이터베이스를 사용하는 경우에 자주 볼 수 있습니다. 둘째, 접두사를 이용하면 DBMS의 예약어 테이블 이름을 사용할 가능성이 낮기 때문입니다.

블로그 애플리케이션 개발을 다음 이정표로 나눕니다.

  • Milestone 1 : 블로그 시스템의 프로토 타입을 만듭니다. 필요한 대부분의 기능을 포함합니다.
  • Milestone 2 : 기사의 평가 기능을 완성합니다. 기사 작성, 목록, 문서보기, 업데이트, 삭제가 포함됩니다.
  • Milestone 3 : 댓글 관리 기능을 완성합니다. 코멘트 작성, 목록 표시, 승인, 업데이트, 삭제가 포함됩니다.
  • Milestone 4 : 포틀릿을 구현합니다. 사용자 메뉴, 로그인, 태그 클라우드, 최근의 코멘트를 포함합니다.
  • Milestone 5 : 최종 조정 및 배포합니다.

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

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

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

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

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



데이터베이스 설치

  1. 데이터 베이스 만들기
  2. 데이터베이스 연결 설정하기

기본 어플리케이션의 데이터베이스의 설계가 끝났습니다.
이번 섹션에서는 블로그의 데이터베이스를 작성하고 기본 어플리케이션에서 데이터베이스와의 연결을 설정합니다


1. 데이터베이스 만들기

Yii 데이터베이스 지원은 PDO 위에 구축되어 있기 때문에 어플리케이션의 코드를 변경하지 않고, MySQL 및 PostgreSQL 등
다양한 DBMS를 사용할 수 있습니다.

우리는 SQLite 데이터베이스를 사용하겠습니다.
Yii 데이터베이스 PDO 위에 구축되어 있기 때문에 어플리케이션의 코드를 변경하지 않고, MySQL 및 PostgreSQL 등 다양한 DBMS를 사용할 수 있습니다.

데이터베이스 파일은 blog.db는 /wwwroot/blog/protected/data 에 만들면 됩니다.
또한, 디렉토리와 데이터베이스 파일 모두 쓰기권한으로 되어 있어야 웹서버 프로세서가 돌면서 SQLite 에 서 사용할수 있습니다.

우리는 이미 설치된 Yii 블로그 데모에서 데이터베이스 파일을 복사 할수 있으며 사용 할수 있습니다.
데이터파일 은 /wwwroot/yii/demos/blog/protected/data/blog.db 에 있습니다. 또는,  /wwwroot/yii/demos/blog/protected/data/schema.sqlite.sql 파일을 실행하여 데이터베이스를 생성 할수 있습니다.
라는 파일에있는 SQL 문을 실행하여 데이터베이스를 생성 할 수 있습니다.

팁: SQL 문장의 실행은 SQLite 공식 웹 사이트 에있는 sqlite3 실행 도구를 사용할 수 있습니다.


2. 데이터베이스 연결 설정하기

기본어플리케이션에서 블로그 데이터 베이스를 사용하기 위해서는 /wwwroot/blog/protected/config/main.php 에 저장되어 있는 PHP 스크립트의 구성을 변경하여야 합니다. 이 스크립트는  name-value 쌍으로 구성된 연관 배열을 반환하며, 이 값은
기본어플리케이션의 인스턴스의 쓰기 속성을 초기화 하는데 사용됩니다.

DB 구성 요소는 다음과 같습니다.

return array(
    ......
    'components'=>array(
        ......
        'db'=>array(
            'connectionString'=>'sqlite:/wwwroot/blog/protected/data/blog.db',
            'tablePrefix'=>'tbl_',
        ),
    ),
    ......
);

위의 설정은 어플리케이션이 DB application component를 가지고 있으며, connectionString 의 값은 sqlite:/wwwroot/blog/protected/data/blog.db로 초기설정이 되며, 그리고 tablePrefix속성이 tbl_ 이라는것을 보여줍니다.


이 설정은 어플리케이션의 어디에서나 Yii::app()->db 코드를 통해 DB 연결 개체에 액세스 할 수 있습니다. 
Yii::app()는 entry script로 작성된 애플리케이션 인스턴스를 리턴 해주는 것에 주의 해야 합니다.DB 연결이 있을수 있는 매서드와 속성에 관심이 있다면, class reference를 참조하세요. 하지만, 대부분의 경우 우리는 직접 DB 연결을 사용할 수 없습니다.
대신, 우리는 액티브 레코드 를 사용하여 데이터베이스에 액세스합니다.


구성 파일에서 설정 한 tablePrefix 속성에 대해 좀 더 설명하겠습니다. 이것은 데이터베이스 테이블 이름의 접두어로 tbl_ 을 사용하는 것을 db 연결 개체에 전달합니다. 구체적으로는, 만약 SQL 문장에 이중 중괄호로 둘러싸인 토큰이있는 경우 (예:{{post}}), db 연결은 그것을 테이블 접두어를 붙인 이름 (예:tbl_post)로 변환 하고 DBMS에 전송하여 실행 시킵니다.
이 기능은 향후 테이블 접두어를 변경해야하는 경우에도 소스 코드를 만지는 필요가 없다는 점에서 매우 유용합니다. 
예를 들어, 일반 콘텐츠 관리 시스템 (CMS)를 개발하는 경우이 기능을 사용하면 CMS를 새로운 환경에 설치할 때 사용자가 테이블 접두어를 자유롭게 선택할 수 있도록 할 수 있습니다.

팁: 만약 데이터를 저장하기 위해 SQLite 대신 MySql을 사용 하려면 /wwwroot/yii/demos/blog/protected/data/schema.mysql.sql 의 SQL 문을 사용하여 blog 라는 MySql 데이터베이스를 만들수 있습니다. 그리고 기본어플리케이션의 구성 파일을 다음과 같이 수정합니다.

return array(
    ......
    'components'=>array(
        ......
        'db'=>array(
            'connectionString' => 'mysql:host=localhost;dbname=blog',
            'emulatePrepare' => true,
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
            'tablePrefix' => 'tbl_',
        ),
    ),
  ......
);



이 곳은 제가 개인적으로 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 () 메소드는 게시물 데이터 뷰를 랜더링 합니다.


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

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

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

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

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



사용자 인증

블로그 응용 프로그램은 시스템 소유자 및 게스트 사용자를 구별해야합니다. 따라서, 우리는 사용자 인증 기능을 구현해야합니다.

기본어플리케이션에서 이미 사용자 이름과 비밀번호가 demo또는 admin 으로 사용자 인증 기능을 제공하고 있다는것을 확인 할 수 있을 것 입니다. 이 섹션에서는 사용자 인증을 User 데이터베이스 테이블을 기반으로 하도록 해당 코드를 수정합니다.

사용자 인증은 IUserIdentity 인터페이스를 구현하는 클래스에서 이루어집니다. 기본응용프로그램은 이 목적을 위해 UserIdentity 클래스를 사용하고 있습니다. 이 클래스파일은 /wwwroot/blog/protected/components/UserIdentity.php 에 저장되어 있습니다.

팁 : 규칙에 따라 클래스 파일 이름은 해당 클래스 이름에 접미사로 확장 . php 를 붙인 것으로 해야 합니다. 이 규칙에 따르면, 경로 별칭 을 사용하여 클래스를 참조 할 수 있습니다. 예를 들어 UserIdentity 클래스를 application.components.UserIdentity 라는 별칭으로 참조 할 수 있습니다. Yii는 많은 API가 경로 별칭을 인식합니다 (예 Yii :: createComponent () ). 그리고 경로 별칭을 사용하면 코드에 절대 경로를 포함 할 필요가 없습니다.
코드에 포함 된 절대 경로는 종종 응용 프로그램 배포시 문제가 발생합니다.

UserIdentity 클래스를 다음과 같이 수정합니다.

<?php
class UserIdentity extends CUserIdentity
{
    private $_id;
 
    public function authenticate()
    {
        $username=strtolower($this->username);
        $user=User::model()->find('LOWER(username)=?',array($username));
        if($user===null)
            $this->errorCode=self::ERROR_USERNAME_INVALID;
        else if(!$user->validatePassword($this->password))
            $this->errorCode=self::ERROR_PASSWORD_INVALID;
        else
        {
            $this->_id=$user->id;
            $this->username=$user->username;
            $this->errorCode=self::ERROR_NONE;
        }
        return $this->errorCode==self::ERROR_NONE;
    }
 
    public function getId()
    {
        return $this->_id;
    }
}

authenticate () 메소드에서는 User 클래스를 이용하여 tbl_user 테이블 중에서 username 컬럼이 주어진 username 과 동일한 행을 대소문자 구분방식으로 찾습니다. User 클래스는 이전 섹션에서 gii도구에 의해 만들어진 것임을 기억하십시오. User 클래스는 CActiveRecord 를 상속하고 있기 때문에, ActiveRecord 기능 을 이용하여 객체 지향 (OOP)의 방식으로 tbl_user 테이블에 액세스 할 수 있습니다

사용자가 유효한 암호를 입력했는지 여부를 확인하기 위해 User 클래스의 validatePassword 메소드를 호출합니다. /wwwroot/blog/protected/models/User.php 를 다음과 같이 수정해야 합니다.  일반 암호를 데이터베이스에 저장하는 것이 아니라 암호 해시 결과를 무작위로 발생한 salt key 함께 저장하는 것에주의하십시오. 사용자가 입력 한 암호를 확인 할 때 암호 대신 해시 된 결과를 비교하는 것입니다.

class User extends CActiveRecord
{
    ......
    public function validatePassword($password)
    {
        return $this->hashPassword($password,$this->salt)===$this->password;
    }
 
    public function hashPassword($password,$salt)
    {
        return md5($salt.$password);
    }
}

UserIdentity 클래스는 getId () 메서드를 재정의하고 tbl_user 테이블에서 발견 된 사용자 id 를 반 합니다. 원래 구현 대신 사용자 이름을 반환하도록 되어 있었습니다. username 과 id 속성은 모두 사용자 세션에 저장된 코드로, 어디서나
Yii :: app () -> user 로 액세스 할 수 있습니다.


팁:
 UserIdentity 클래스에서는 해당 클래스 파일을 명시 적으로로드하지 않고도 CUserIdentity 를 참조하고 있습니다. 이것은 CUserIdentity 이 Yii framework의 코어 클래스이기 때문입니다. Yii는 모든 코어 클래스가 처음 참조 될 때 자동으로 그 클래스 파일을로드합니다.

User 클래스에서도 같은 일이 벌어지고 있습니다. 왜냐하면, User 클래스 파일이 /wwwroot/blog/protected/models 디렉토리에 있고, 그 디렉토리가 응용 프로그램 초기 구성 아래 코드에서 PHP의 include_path 에 추가되어 있기 때문입니다.
return array(
    ......
    'import'=>array(
        'application.models.*',
        'application.components.*',
    ),
    ......
);

위의 초기 구성은 /wwwroot/blog/protected/models or /wwwroot/blog/protected/components 아래에 클래스 파일이있는 모든 클래스 먼저 클래스를 참조 할 때 자동으로 로드되는 것을 입니다.

UserIdentity 클래스는 주로 LoginForm 클래스에서 로그인 페이지에서 입력 된 사용자 이름과 암호를 바탕으로 사용자를 인증하는 데 사용됩니다. 다음 코드 조각에서 UserIdentity 가 어떻게 사용되는지를 보여줍니다.


$identity
=new UserIdentity($username,$password); $identity->authenticate(); switch($identity->errorCode) { case UserIdentity::ERROR_NONE: Yii::app()->user->login($identity); break; ...... }

정보: 사람들은 종종 identity 와 user 어플리케이션 구성요소에 대해서 혼란에 빠집니다.전자는 인증 방법이고, 후자는 현재 사용자에 대한 정보를 나타냅니다. 응용 프로그램을 가질 user 구성 요소는 하나 뿐이지 만, identity 클래스는 어떤 인증 방법을 지원 하느냐에 따라 하나 이상의 클래스를 가질 수 있습니다. 일단 인증이 성공하면 identity 인스턴스에서 user 요소에 인증 정보를 전달하고 응용 프로그램 전체에서 user 를 이용하여 액세스 할 수 있습니다.

수정 된 UserIdentity 클래스를 테스트하기 위해, 브라우저에서 URLhttp://www.example.com/blog/index.php 에 액세스하여 tbl_user 테이블에 저장 한 사용자 이름과 비밀번호로 로그인을 시도해 보십시요. 블로그 데모 에서 제공되는 데이터베이스를 사용하는 경우, 사용자 이름 demo 암호 demo 에 액세스 할 수 있어야합니다. 이 블로그 시스템은 사용자 관리 기능이없는 점에 유의하십시오. 결과적으로 사용자는 웹 인터페이스를 통해 자신의 계정을 변경하거나 새로운 계정을 만들거나 할 수 없습니다. 사용자 관리 기능은 블로그 프로그램의 앞으로의 확장으로 간주 될 수 있습니다.

+ Recent posts

티스토리 툴바