ユーザー登録を処理する
アカウントテーブル、モデル、登録フォームが用意できたので、次は、ユーザーの登録情報を確認し、アカウントを作成するコードを記述します。この例では、フォームのアクションとして、accountという名前のコントローラ内に作成したregisterという名前のアクションが設定されているものとします。
01 public function registerAction()
02 {
03 // Create array for errors
04 $this->view->errors = array();
05
06 if ($this->getRequest()->isPost()) {
07
08 $customer = new Default_Model_Customer();
09
10 $result = $customer->save($this->_request->getPost());
11
12 if (! is_array($result)) {
13
14 $this->view->created = 1;
15
16 } else {
17
18 $this->view->errors = $result;
19
20 $this->view->firstName = $this->_request->getPost('first-name');
21 $this->view->lastName = $this->_request->getPost('last-name');
22 $this->view->email = $this->_request->getPost('email');
23 $this->view->pswd = $this->_request->getPost('pswd');
24 $this->view->userName = $this->_request->getPost('username');
25
26 }
27
28 }
29
30 }
このアクションのうち、少しわかりにくいと思われる部分について説明しておきます。
- 04行目では、データ確認プロセス全体を通して発生する、任意のエラーを格納するための配列を初期化しています。
- 登録フォームが送信された場合は、06行目で
POSTされたデータを検出し、確認およびアカウント作成プロセスを開始します。 - 10行目では、アカウントモデル内の
save()というメソッドを呼び出して、ユーザーアカウントの作成を試みます。確認と挿入に関するロジックはすべてこのメソッドにまとめてあるため、最小限のコードで軽量なコントローラを作成できるようになっています(save()メソッドの具体的なコードはこの後で紹介します)。ここでは、このメソッドを呼び出して配列が返された場合は、1つ以上のエラーが生じたことになるため、それらをview変数に代入し(18行目)、フォームに情報を再表示するために各種変数に値を設定します。配列が返されなかった場合は、$this->view->createdというview変数を作成します。この変数は、アカウントが正常に作成されたことをユーザーに通知するために使用します。
アカウントモデルのsave()メソッドは次のようになります。
01 public function save(array $data)
02 {
03
04 // Initialize the errors array
05 $errors = array();
06
07 // First Name
08 if (! Zend_Validate::is($data['first-name'], 'NotEmpty')) {
09 $errors[] = "Please provide your first name.";
10 }
11
12 // Last Name
13 if (! Zend_Validate::is($data['last-name'], 'NotEmpty')) {
14 $errors[] = "Please provide your last name.";
15 }
16
17 // Does Email already exist?
18 if (Zend_Validate::is($data['email'], 'EmailAddress')) {
19
20 $result = $this->findByEmail($data['email']);
21
22 if ($result != false) {
23 $errors[] = "An account using this e-mail address already exists.";
24 }
25
26 } else {
27 $errors[] = "Please provide a valid e-mail address.";
28 }
29
30 // Password must be at least 6 characters
31 $valid_pswd = new Zend_Validate_StringLength(6,20);
32 if (! $valid_pswd->isValid($data['pswd'])) {
33 $errors[] = "Your password must be 6-20 characters.";
34 }
35
36 // If no errors, insert the
37 if (count($errors) == 0) {
38
39 $data = array (
40 'first_name' => $data['first-name'],
41 'last_name' => $data['last-name'],
42 'email' => $data['email'],
43 'pswd' => md5($data['pswd']),
44 'recovery_key' => ''
45 );
46
47 return $this->insert($data);
48
49 } else {
50 return $errors;
51 }
52
53 }
このコードはごく単純なものなので、各行についての細かい説明は省略します。20行目に出てくるfindByEmail()メソッドは、指定された電子メールを使用するアカウントがまだ存在しないことを確認するためのもので、これもモデル内の簡単なメソッドです。
ここで紹介した方法は、登録ロジックを作成するためのいくつかの方法のうちの1つにすぎないということを覚えていてください。しかし、ここで示したような、「モデルはファット(豊富)に、コントローラはシン(軽量)に」という原則に従うことをお勧めします。Zend Frameworkプロジェクトを統括するMatthew Weier O'Phinney氏が、まさにこの話題に関する素晴らしいブログ投稿をここに公開しています。
この記事は参考になりましたか?
- japan.internet.com翻訳記事連載記事一覧
- この記事の著者
-
japan.internet.com(ジャパンインターネットコム)
japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.com や EarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
W. Jason Gilmore(W. Jason Gilmore)
オハイオ州コロンバスに本社を置く出版・コンサルティング企業であるW.J. Gilmore, LLCの創設者。最新のプロジェクトに、PHP言語の学習用ワンストップショップEasyPHPWebsites.comがある。以前はApressのオープンソース系編集者として60冊を超える書籍の出版に携わり、オープンソース製品に関する優れた出版物の刊行に貢献。著作も多く、ベストセラーになった『Beginning PHP and MySQL: From Novice to Professional』(現在は第3版)、『Beginning PHP and PostgreSQL: From Novice to Professional』、『Beginning PHP and Oracle: From Novice to Professional』などがある。年1回の開発者向けカンファレンス「CodeMash」を主催する非営利組織CodeMashの共同創設者。2008 MySQL Conferenceの発表者選考委員会のメンバーも務めた。Developer.com、Linux Magazine、TechTargetなどの著名なサイトに執筆したチュートリアルや記事の数は100以上にのぼる。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
