フォーム処理の実装例

フォームの設定と処理の流れの具体的な実装を簡単なメールフォームを通じて見ていきます。

仕様

画面遷移は

メールフォーム画面 ▼ 確認画面 ▼ メール送信

フォームは以下のものとします。













<p><label for="sender_name">送信者名</label><br />
<input type="text" name="sender_name" id="sender_name" size="30" value="" /><br />
<label for="sender_mailaddress">送信者メールアドレス</label><br />
<input type="text" name="sender_mailaddress" id="sender_mailaddress" size="50" value="" /><br />
<label for="receipient_mailaddress">送信先メールアドレス</label><br />
<input type="text" name="receipient_mailaddress" id="receipient_mailaddress" size="50" value="" /><br />
<label for="prefecture">都道府県</label><br />
<select name="prefecture" id="prefecture">
<option value="">(以下から選択してください)</option>
<option value="北海道">北海道</option>
<option value="青森県">青森県</option>
<option value="岩手県">岩手県</option>
<option value="宮城県">宮城県</option>
<option value="秋田県">秋田県</option>
<option value="山形県">山形県</option>
</select><br />
<label for="subject">題名</label><br />
<input type="text" name="subject" id="subject" size="30" value="" /><br />
<label for="body">本文</label><br />
<textarea name="body" id="body" rows="5" cols="40"></textarea><br />
</p>

ただし

これをChimpanzeeのフォーム機能で生成します。

設定

全体設定

エラーメッセージの表示設定はメッセージを囲むHTMLタグは設定ファイル{(app_root), _common}/configs/Form.phpで設定できます。
必須メッセージを変更しておきます。

(app_root)/configs/Form.php

<?
class configForm extends CZConfig {

	public function _construct() {
		$this->setValues(array(
				:			
			'required_err_msg' => '記入してください。',
				:
		));
	}

}
?>

フォームの設定

フォームの設定です。フォーム(クラス)名をMailとします。

<?
class formMail extends CZForm {

	public function _construct() {
		$parts = array(
			'sender_name' => array(
				'type'		=> 'text',
				'caption'   => '送信者名',
				'required_flag'  => TRUE,
				'option'	=> 'size="30"',
			),
			'sender_mailaddress' => array(
				'type'		=> 'text',
				'caption'   => '送信者メールアドレス',
				'required_flag'  => TRUE,
				'validate'  => array(
					'func' 	=> 'cz_mail_addr',
					'err_msg' => '正しいメールアドレスを入力してください',
				),
				'option'	=> 'size="50"',
			),
			'receipient_mailaddress' => array(
				'type'		=> 'text',
				'caption'   => '送信先メールアドレス',
				'required_flag'  => TRUE,
				'validate'  => array(
					'func' 	=> 'cz_mail_addr',
					'err_msg' => '正しいメールアドレスを入力してください',
				),
				'option'	=> 'size="50"',
			),
			'prefecture' => array(
				'type'		=> 'select',
				'caption'	=> '都道府県',
				'table'	=> array(
					'北海道' => '北海道',
					'青森県' => '青森県',
					'岩手県' => '岩手県',
					'宮城県' => '宮城県',
					'秋田県' => '秋田県',
					'山形県' => '山形県',
				),
				'head_value'=> array(
					'' => '(以下から選択してください)'
				),
			),
			'subject' => array(
				'type'		=> 'text',
				'caption'	=> '題名',
				'required_flag'	=> TRUE,
				'option'	=> 'size="30"',
			),
			'body' => array(
				'type'		=> 'textarea',
				'caption'	=> '本文',
				'option'	=> 'rows="5" cols="40"',
			),
		);
		$this->setParts($parts);
	}

}
?>

これを(app_root)/forms/Mail.phpとして保存します。

処理

上記の設定を用いたフォーム処理を行うアクションを記述します。まずコントローラファイルを用意します。コントローラ名はMailとします。

<?
class ctrlMail extends CZCtrl {

}
?>

これを(app_root)/ctrls/Mail.phpとして保存します。上記のコントローラの中にアクションを記述していきます。

フォーム表示処理

メールフォーム画面を表示するアクションformです。

public function actionForm() {
	$form = $this->newForm('mail');
	$this->addViewVar('title', 'メールフォーム');
	$this->addViewVar('form', $form);
}

フォームインスタンスを生成し、ビュー変数として指定して画面を表示します。

確認画面表示処理

確認画面を表示するアクションconfirmです。

public function actionConfirm() {
	$form = $this->newForm('mail');
	if (!$form->saveValuesByPost()) {
		$this->_redirect(array('form', FALSE, FALSE));
	}
	$this->addViewVar('title', '送信内容確認');
	$this->addViewVar('description', '以下の内容で送信してもよろしいですか?。');
	$this->addViewVar('form', $form);
}

メソッドsaveValuesByPost()フォームの値を受け取り、失敗(バリデーションでエラーが発生)した場合はフォーム画面に戻し、通過した場合はフォームインスタンスをビュー変数に指定して確認画面の表示をしています。

送信処理

フォームの内容を送信するアクションsendです。

public function actionSend() {
	mb_language('Japanese');
	$form = $this->newForm('mail');
	$values = $form->loadValues();
	$mail = array(
		'to'				=> $values['receipient_mailaddress'],
		'subject'			=> $values['subject'],
		'message'			=> 
			'送信者名:' . $values['sender_name'] . "\n"
			. '都道府県:' . $values['prefecture'] . "\n"
			. $values['body'],
		'additional_headers' => 
			'From: ' . $values['sender_mailaddress'],
	);
	if (mb_send_mail($mail['to'], $mail['subject'], $mail['message'], $mail['additional_headers'])) {
		$this->addViewVar('title', '送信しました。');
		$this->addViewVar('description', 'ありがとうございました。');
	} else {
		$this->addViewVar('title', '送信に失敗しました。');
		$this->addViewVar('description', '残念でした。');
	}
	$form->initValues();
}

PHPの関数mb_send_mail()で送信し、その結果によって表示する文言を変えています。最後にフォームに入力した値をクリア(初期化)しています。

ビュー

ビューは任意ですが、フォーム画面では<?= $form->getFormHtml() ?>でフォームのHTMLを、確認画面では<?= $form->getConfirmHtml() ?>で確認画面のHTMLを表示させます。

共通部分

ヘッダとフッタはすべてのアクションで共通とします。

ヘッダ

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?= $title ?> | PHPフレームワーク Chimpanzee - メールフォーム</title>
</head>
<body>
	<h1><?= $title ?></h1>
	<? if ($_err): ?><?= $_err; ?><br /><? endif; ?>

これを(app_root)/views/_common/header.htmlとして保存します。$_errはシステム全体のエラーメッセージで、メッセージがあれば表示します。

フッタ

</body>
</html>

これを(app_root)/views/_common/footer.htmlとして保存します。

各アクション

アクションformのビュー(テンプレートファイル)

<?= isset($description) ? $description : '' ?>
<form enctype="multipart/form-data" action="<?= $this->url(array('confirm')); ?>" method="post">
	<?= $form->getFormHtml() ?>
	<br />
	<input type="submit" value="送信する" /><br />
</form>
<br />

ビュー変数として受け取ったフォームインスタンスからgetFormHtml()を実行し、フォームのHTMLを出力しています。これを(app_root)/views/mail/form.htmlとして保存します。

アクションconfirmのビュー(テンプレートファイル)

<?= isset($description) ? $description : '' ?>
<?= $form->getConfirmHtml() ?>
<br />
<a href="<?= $this->url(array('send')); ?>">はい</a><br />
<a href="<?= $this->url(array('form')); ?>">いいえ</a><br />

ビュー変数として受け取ったフォームインスタンスからgetConfirmHtml()を実行し、確認画面のHTMLを出力しています。これを(app_root)/views/mail/confirm.htmlとして保存します。

アクションsendのビュー(テンプレートファイル)

<?= isset($description) ? $description : '' ?>

これを(app_root)/views/mail/send.htmlとして保存します。

以上です。このように作成したプログラムがこちらになります。メールを送信することはできません。

サンプルプログラムのプロジェクト以下のソース一式はメールフォームのサンプルからダウンロードできます。

前後のページ

ページトップへ