 |  |
|
핵심 코드 작성하기
기본 구조가 베이크되었고 레이아웃도 좀 더 자신의 취향에 맞게 맞추었으니 이제 크리키의 핵심 코드를 작성하는 방법에 대해 알아보자.
핵심 코드에는 사용자 코드, 페이지 코드, 히스토리 코드의 세 가지 기본 코드가 있다. 사용자와 관련된 코드는 간단한 사용자 등록과 로그인의 기본을 다룬다. 여기선 사용자나 권한에 대해 걱정하지 말자. Part 3에서 다룰 것이다. 페이지 코드는 마크업 렌더링을 포함한 위키 엔트리 생성, 편집, 읽기를 다룬다. 히스토리 코드는 페이지 수정을 추적한다.
사용자 등록
크리키에서 제일 먼저 해야 할 작업은 사용자 코드다. 사용자는 계정, 로그인, 로그아웃을 위해 등록을 할 수 있어야 한다. 사용자가 편집할 수 있기 전에 등록을 해야 할 경우 제어할 수 있는 구성 설정은 이후로 미루고, 지금은 일단 기본적인 사용자 등록 코드만을 만들어 보자.
구성 설정에 관계없이 기본적인 사용자 등록은 거의 똑같아 보인다. 다음 내용은 꼭 확인해야 하는 사항들이다.
- 사용자 이름이 사용 가능한지
- 이메일 주소가 예전에 등록되지 않았는지
이 외에도 사용자 등록에 있어 추가할 수 있는 확인사항은 많다. 사용자 이름이나 패스워드의 글자 수 제한, 이메일 확인 등이 그것이다. 하지만 여기서 다루는 것은 기본적인 사용자 등록이니 이 정도로 충분할 것이다.
등록 뷰
CakePHP에서는 app/views/users 디렉터리에 등록 뷰를, 사용자 컨트롤러(app/controllers/users_controller.php)에 등록 동작을 만들어야 한다. 등록 뷰는 Listing 2와 같다.
Listing 2. 등록 뷰
<?php echo $html->formTag('/users/register') ?>
<p>Please fill out the form below to register an account.</p>
<label>Username:</label>
<?php echo $html->inputTag('User/username') ?>
<?php echo $html->tagErrorMsg('User/username', $username_error) ?>
<label>Password:</label>
<?php echo $html->passwordTag('User/password') ?>
<?php echo $html->tagErrorMsg('User/password', $password_error) ?>
<label>Email Address:</label>
<?php echo $html->inputTag('User/email') ?>
<?php echo $html->tagErrorMsg('User/email', $email_error) ?>
<?php echo $html->submitTag('register') ?>
</form>
|
이는 매우 간단한 등록 양식이다. 여기에는 기본적인 양식 요소와 몇몇 유효하지 않은 등록 에러를 위한 CakePHP 에러 메시지 위치 구분자가 있다.
등록 동작
사용자 컨트롤러에서 등록 동작은 Listing 3처럼 보인다.
Listing 3. 등록 동작
function register() {
$this->set('username_error', 'username is required');
$this->set('password_error', 'password is required');
$this->set('email_error', 'email is required');
if (!empty($this->data) && $this->User->validates($this->data)) {
if ($this->User->findByUsername($this->data['User']['username'])) {
$this->User->invalidate('username');
$this->set('username_error', 'username already in use');
} else if ($this->User->findByEmail($this->data['User']['email'])) {
$this->User->invalidate('email');
$this->set('email_error', 'email address already in use');
} else {
$this->data['User']['password'] = md5($this->data['User']['password']);
$this->User->save($this->data);
$this->Session->write('User',
$this->User->findByUsername($this->data['User']['username']));
$this->Session->setFlash('Thank you for registering.');
$this->redirect('/');
}
} else {
$this->validateErrors($this->User);
}
}
|
이 동작은 기본 에러 메시지를 설정한다. 사용자 이름과 이메일 주소가 이미 사용된 것이 아님을 확인한다. 사용자 등록이 되면 사용자 데이터는 Users 테이블(비밀번호를 어려운 것으로 바꾼 후)에 저장된다. 사용자 데이터는 데이터베이스에서 꺼내와 세션에 저장한다. 이 데이터는 사용자가 로그인되어 있는지 알아보기 위해 쓰인다. 정보를 제출 양식에서 바로 사용하지 않고 데이터베이스에서 가져와 사용하는 이유는 데이터베이스가 새로 등록된 사용자의 기본 접속 레벨을 포함하고 있기 때문이다. 이는 나중에 권한을 다룰 때 사용된다. 마지막으로 사용자는 홈 페이지의 등록 완료 페이지로 이동된다.
|  |