ユーザーの登録~完了まで。
入力項目は名前とmailアドレス。
guesswork利用した時と似た感じになった。
自分がやりやすいからだと思うのだけど、これ正しいやり方?
CodeIgniter利用しても似た感じになるのかなー。
テンプレートエンジンにPHPTAL使ったのでview系のヘルパーは一切利用してません。
■コントローラ
・/application/controllers/reg.php
<?php defined('SYSPATH') or die('No direct script access.');
class Reg_Controller extends Controller {
function __construct()
{
parent::__construct();
$this->validation->error_format('{message}');
}
function index($status='init')
{
$fields = array('username', 'mail', 'mail_confirm');
$methodName = sprintf('index_%s', $status);
if (!method_exists($this, $methodName)) {
throw new Kohana_Exception('status error $status');
}
$this->$methodName($fields);
}
private function index_init($fields)
{
$data = array();
foreach($fields as $key) {
$data[$key] = '';
$data[$key.'_error'] = '';
}
$this->ptal->view('reg/index', $data);
}
private function index_edit($fields)
{
$confirmData = $this->session->get('confirmData');
$data = array();
foreach($fields as $key) {
$data[$key] = $confirmData[$key];
$data[$key.'_error'] = '';
}
$this->ptal->view('reg/index', $data);
}
private function index_confirm($fields)
{
$data = $this->getInput($fields);
$rules['username'] = 'required';
$rules['mail'] = 'required|valid_email';
$rules['mail_confirm'] = 'required|valid_email|matches[mail]';
$this->validation->set_rules($rules);
if ($this->validation->run() == FALSE)
{
foreach(array_keys($rules) as $key) {
$fieldName = $key.'_error';
$data[$fieldName] = $this->validation->$fieldName;
}
// 入力画面
$this->ptal->view('reg/index', $data);
return;
}
foreach($fields as $name) {
$confirmData[$name] = $data[$name];
}
$this->session->set('confirmData', $confirmData);
// 確認画面
$this->ptal->view('reg/confirm', $data);
}
function send()
{
$confirmData = $this->session->get_once('confirmData');
if (!$confirmData) {
url::redirect('/reg');
return;
}
// TODO:DB登録処理
// TODO:メール送信処理
$data['mail'] = $confirmData['mail'];
// 完了画面
$this->ptal->view('reg/send', $data);
}
private function getInput($nameList)
{
$data = array();
foreach($nameList as $name) {
$data[$name] = $this->input->post($name);
}
return $data;
}
}
■テンプレート
・/application/views/reg/index.html(入力)
<html>
<head>
<title>入力画面</title>
</head>
<body>
<!-- ここから上はダミー -->
<div id="content" metal:define-macro="content">
<form action="/reg/index/confirm" method="post">
<table>
<tr>
<td class="label">*ユーザー名</td>
<td class="input"><input tal:attributes="value username" name="username" type="text" /></td>
<td class="msg" tal:content="username_error"></td>
</tr>
<tr>
<td class="label">*mail</td>
<td class="input"><input tal:attributes="value mail" name="mail" type="text" /></td>
<td class="msg" tal:content="mail_error"></td>
</tr>
<tr>
<td class="label">*mail(確認)</td>
<td class="input"><input tal:attributes="value mail_confirm" name="mail_confirm" type="text" /></td>
<td class="msg" tal:content="mail_confirm_error"></td>
</tr>
</table>
<input type="submit" value="確認" />
</form>
</div>
<!-- ここから下はダミー -->
</body>
</html>
・/application/views/reg/confirm.html(確認)
<html>
<head>
<title>確認画面</title>
</head>
<body><!-- ここから上はダミー -->
<div id="content" metal:define-macro="content">
<table>
<tr>
<td class="label">ユーザー名</td>
<td class="value" tal:content="username">ユーザー名</td>
</tr>
<tr>
<td class="label">mail</td>
<td class="value" tal:content="mail">mail</td>
</tr>
</table>
<div>
<a href="/reg/index/edit/">修正</a> <a href="/reg/send">送信</a>
</div>
</div>
<!-- ここから下はダミー -->
</body>
</html>
・/application/views/reg/send.html(完了)
<html>
<head>
<title>完了画面</title>
</head>
<body><!-- ここから上はダミー -->
<div id="content" metal:define-macro="content">
<p><span tal:content="mail">メアド</span>に確認メールを送信しました。</p>
</div>
<!-- ここから下はダミー -->
</body>
</html>
Validation便利なんだけどメッセージが英語なんだよね。
日本語対応とかしないとダメだよね。きっと^^;
ソフトウェア開発、アジャイルなどについてSE兼PGが思った事を書いてます。たまにプログラムも