自分なりの目線で情報を発信します。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
Zend_Validateを使って入力チェックを行うサンプルです。
Zend Frameworkリファレンス (Zend_Validate)
■使用ファイル
- testform.phtml 名前などの情報を入力して送信するフォーム
- success.phtml 送信成功を伝える画面
- testformController.php フォームデータを処理するコントローラー
■メッセージ日本語化
Zend_Validateはデフォルトで日本語に対応していないので、
エラーメッセージを日本語化してしまいましょう。
この処理は常に行うため、Bootstrap.phpに日本語化処理を書きます。
※Bootstrapクラスに"_init"で始まるメソッドを追加するとフレームワークから実行されます。
これを初期化処理として利用できます。
Bootstrapについて詳しくはこちらを。参考にさせていただきました。
□application/Bootstrap.phpの中
-
protected function _initLang()
-
{
-
// Zend_Validateのメッセージ日本語化
-
// 言語ファイルのロード
-
$translator = new Zend_Translate(
-
// Arrayアダプタを使って言語定義を取得
-
'array',
-
// 言語リソースのパス
-
// 日本語ロケール
-
'ja',
-
// ファイル指定
-
);
-
// デフォルトのトランスレータを設定
-
Zend_Validate_Abstract::setDefaultTranslator($translator);
-
}
当方のZendFrameworkバージョンは、1.11.11です。
このバージョンであれば、Zend_Validateの日本語化ファイルが同梱されていました。(library/languages/ja/Zend_Validate.php)
古いバージョンの場合は、日本語化ファイルを他からもらってくる必要があります。
新しいバージョン(例えばこの1.11.11)の日本語化ファイルを使えば、
古いバージョンでも、たぶん日本語化できる気がします。
■文字列長チェック
Zend_Validateは文字列チェックの際、iconv.internal_encodingを使用します。
デフォルトのままだと'ISO-8859-1'であるため、文字列の長さを正しく判定できない可能性があります。
環境に合った適切なエンコーディングを指定しましょう。
デフォルトのままだと'ISO-8859-1'であるため、文字列の長さを正しく判定できない可能性があります。
環境に合った適切なエンコーディングを指定しましょう。
エンコーディング指定処理を、Bootstrap.phpに書きます。
□application/Bootstrap.phpの中
-
protected function _initEncoding()
-
{
-
}
■testform.phtml
-
<html>
-
<head>
-
<title>テストフォーム</title>
-
</head>
-
<body>
-
<h1>テストフォーム</h1>
-
<?php foreach ($this->errmsgList as $errmsg): ?>
-
<p><?php echo $errmsg; ?></p>
-
<?php endforeach; ?>
-
<form action="/testform/insert" method="post">
-
<table class="inqform_customer" summary="問い合わせ内容">
-
<thead></thead><tfoot></tfoot>
-
<tbody>
-
<tr>
-
<th>名前</th>
-
<td>
-
<input type="text" name="name" id="name" value="<?php echo $this->input['name']; ?>">
-
</td>
-
</tr>
-
<tr>
-
<th>メールアドレス</th>
-
<td>
-
<input type="text" name="email" id="email" value="<?php echo $this->input['email']; ?>">
-
</td>
-
</tr>
-
<tr>
-
<th>電話番号</th>
-
<td>
-
<input type="text" name="telno" id="telno" value="<?php echo $this->input['telno']; ?>">
-
</td>
-
</tr>
-
</tbody>
-
</table>
-
<input type="submit" value="送信">
-
</form>
-
</body>
-
</html>
名前などの情報を入力して送信するフォームです。
ここで入力された内容をtestformController.phpに送ります。
バリデーションエラーがあれば表示します。
■success.phtml
-
<html>
-
<head>
-
<title>送信完了</title>
-
</head>
-
<body>
-
<h1>送信完了</h1>
-
<p>送信完了しました。</p>
-
</body>
-
</html>
入力エラーがなく、送信成功を伝える画面です。
■testformController.php
-
<?php
-
-
class TestformController extends Zend_Controller_Action
-
{
-
-
// 問い合わせ内容登録
-
public function indexAction()
-
{
-
$this->view->assign('errmsgList', $this->errmsgList);
-
$this->view->assign('input', $input);
-
$this->renderScript('testform/testform.phtml');
-
}
-
-
// 問い合わせ内容登録
-
public function insertAction()
-
{
-
// リクエストパラメータ
-
$input['name'] = $this->getRequest()->getParam('name');
-
$input['email'] = $this->getRequest()->getParam('email');
-
$input['telno'] = $this->getRequest()->getParam('telno');
-
-
if ($this->validate($input) === FALSE) {
-
// 入力チェックエラー →エラー内容を通知
-
$this->view->assign('errmsgList', $this->errmsgList);
-
$this->view->assign('input', $input);
-
$this->renderScript('testform/testform.phtml');
-
return;
-
}
-
-
$this->renderScript('testform/success.phtml');
-
}
-
-
// 入力値のバリデーション成否を返す
-
private function validate($data)
-
{
-
-
$validator = new Zend_Validate();
-
->addValidator(new Zend_Validate_NotEmpty());
-
if ($validator->isValid($data['name']) === FALSE) {
-
foreach ($validator->getMessages() as $msgId => $msg) {
-
$errmsg[] = $msg;
-
}
-
}
-
-
$validator = new Zend_Validate();
-
->addValidator(new Zend_Validate_NotEmpty())
-
->addValidator(new Zend_Validate_EmailAddress());
-
if ($validator->isValid($data['email']) === FALSE) {
-
foreach ($validator->getMessages() as $msgId => $msg) {
-
$errmsg[] = $msg;
-
}
-
}
-
-
$validator = new Zend_Validate();
-
->addValidator(new Zend_Validate_NotEmpty())
-
->addValidator(new Zend_Validate_Digits());
-
if ($validator->isValid($data['telno']) === FALSE) {
-
foreach ($validator->getMessages() as $msgId => $msg) {
-
$errmsg[] = $msg;
-
}
-
}
-
-
$this->errmsgList = $errmsg;
-
return FALSE;
-
}
-
-
return TRUE;
-
}
-
}
-
-
// end of file
バリデーションチェックには、以下クラスを使っています。
Zend_Validate_StringLength(文字列長チェック)
Zend_Validate_NotEmpty(必須チェック)
Zend_Validate_EmailAddress(メールアドレス形式チェック)
Zend_Validate_Digits(数字チェック)
バリデーションクラスについては、詳しくはこちらをどうぞ。
□各項目のバリデーションルール
<名前>
- 最大128文字
- 必須
-
->addValidator(new Zend_Validate_NotEmpty());
<メールアドレス>
- 最大320文字
- 必須
- メールアドレス形式
-
->addValidator(new Zend_Validate_NotEmpty())
-
->addValidator(new Zend_Validate_EmailAddress());
<電話番号>
- 最大11文字
- 必須
- 数字のみ
-
->addValidator(new Zend_Validate_NotEmpty())
-
->addValidator(new Zend_Validate_Digits());
PR
お知らせ
最新記事
(03/11)
(02/23)
(01/08)
(12/28)
(11/18)
カテゴリー
プロフィール
HN:
shusatoo
性別:
男性
自己紹介:
基本PHP。JavaScriptちょっとだけ。Javaをほんの少し。
最新トラックバック
カレンダー
12 | 2025/01 | 02 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
ブログ内検索
最古記事
(09/18)
(09/23)
(10/01)
(10/09)
(10/10)
カウンター
アク解アナライズ
ビジター