Ethnaで複数のinputにまたがるValidateをプラグインで実現する

このエントリーをはてなブックマークに追加
はてなブックマーク - Ethnaで複数のinputにまたがるValidateをプラグインで実現する

平井です。久々の投稿です。
珍しくプログラミングに関するエントリーを書きます。

村式では、EthnaというPHPフレームワークを多く活用しています。
先日Ethnaのプラグインを使って、複数のInput値をValidateする機会がありました。
具体的に書かれた情報があまり見つからなかったので、参考になればと思ってエントリーにします。

たとえば以下のように、電話番号の入力フォームを3つのテキストボックスに分けた場合を考えます。

フォームの例

このような時、例えば携帯電話について、

  • フォームのひとつにでも値が入っていたら、他のにも入ってないとおかしい
  • 携帯電話は[3桁]-[4桁]-[4桁]でしょ?

といったことをvalidateで実現したいとします。

こうした場合は、プラグインを作ってvalidateすると簡単です。
プラグインを使ったvalidate方法は、ここで説明されていますが、自分の復習も兼ねて。

プラグインの作成

プラグインファイルには命名規則があって、

[App_id]_Plugin_validator_Xxxxxx.php

という感じでファイルを作成して、

path/to/app_id/app/plugin/Validator

に置きます。

以下、プラグインファイルのソース例です。

< ?php class Hoge_Plugin_Validator_Cellphone extends Ethna_Plugin_Validator {
  	var $accept_array = true;  	// フォーム値の正規表現×3
 	var $regexp1 = '/^0[0-9]0$/';
 	var $regexp2 = '/^[0-9]{4}$/';
 	var $regexp3 = '/^[0-9]{4}$/';
  	/**
 	 * 携帯番号のチェック
 	 *
 	 */
 	function validate($name, $var, $params){
  		// フォーム値×3
 		$var1 = $var['1'];
 		$var2 = $var['2'];
 		$var3 = $var['3'];

  		// 返り値
 		$return = true;

  		// テキストボックスに一つでも値が入っていれば検証する
 		if($var1 != '' || $var2 != '' || $var3 != ''){
  			// 抜けがあったらエラー
 			if($var1 == '' || $var2 == '' || $var3 == ''){
 				$return = false;
 			}else{
 				// 正規表現
 				$match = preg_match($this->regexp1,$var1);
 				$match = $match && preg_match($this->regexp2,$var2);
 				$match = $match && preg_match($this->regexp3,$var3);
  				if(!$match){
 					$return = false;
 				}
 			}
  		}
  		return $return ? true : Ethna::raiseNotice('{form}を正しく入力してください', E_FORM_INVALIDVALUE);
 	}
  }
 ?>

HTML

HTMLはこんな感じになります。

携帯電話番号 - -

プラグインに渡したい値のnameのつけ方がポイントですね。

フォーム定義

validate時にプラグインを使用するように定義します。

var $form = array(
     	'cellphone' => array(
     		'type' => array(VAR_TYPE_STRING),
     		'name' => '電話番号',
     		'filter'=> 'ltrim,rtrim,ntrim',
     		'required' => false,
     		'cellphone' => true,
 	),
 );

複数の値を受け取りたいために、

'type' => array(VAR_TYPE_STRING)

を指定しています。そして、

'cellphone' => true

とすることで、プラグインを使用することをEthnaに伝えています。
この辺、詳しくはやっぱりこのあたりを参照してください。

Ethnaでは(Ethnaに限りませんが)、プラグインを使うと使い勝手がぐっとひろがります。これからもいろいろ試していこうと思います。

カテゴリー: php   パーマリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>