伊藤清徳の垂直落下式ムーンサルトプレス

PerlとかPHPとかMySQLとか...がんばっても8割だ。

INTER-Mediatorのバリデーションを構築するクラスをつくったった

さてさて今回もまたまたINTER-Mediatorですよ。
本当にseezooとINTER-Mediatorに感謝です。
 


INTER-Mediatorのバリデーションは

'validation' => array(
	array(
		'filed' => 'filed_nam1',
		'rule'	=> 'value == ""',
		'message' => 'フィールド名1は必須です'
	),
	array(
		'filed' => 'filed_nam1',
		'rule'	=> 'value.match(/[0-9]{3}\-[0-9]{4}/)',
		'message' => 'フィールド名1は郵便番号形式で書いてください。'
	),
),

のように書きます。「rule」の項目がjavascript中でeval()で評価され、
falseが返されれば「message」の項目がalertされるという仕組みで動いています。
実にシンプルな仕組みです。
 


 
シンプルな仕組みですが、毎回javascriptのコードを書くのは面倒っていうのと、
大体バリデーションでやりたいことって決まってますよね。
たとえば何か入力しないとダメとか、数字以外の文字がはいってたらダメとか。
郵便番号形式とか。
 
その辺を予めエラーメッセージと合わせて、
ある程度自動化してくれるPHPクラスを作りました。
(ただバリデーションの内容はいい加減なのと、ライブラリとしては未完成です)
 

<?php
/* =============================================================================
 * INTER-Mediator用バリデーション構築クラス
 * @Author KiyonoriIto
 * ========================================================================== */
class im_validation
{
	// ----------------------------------------------------
	/**
	 * 構築
	 */
	public static function get_validation_def( $rules )
	{
		$return = array();
		
		foreach( $rules as $one )
		{
			foreach( $one['rules'] as $method )
			{
				if( is_callable('self::' . $method)  )
				{
					$return[] = self::$method( $one['filed'], $one['name'] );
				}
			}
		}
		
		return $return;
	}
	
	// ----------------------------------------------------
	// 以下バリデーション定義
	// ----------------------------------------------------
	
	/**
	 * 必須
	 * @param string $field
	 * @param string $name
	 * @return array
	 */
	protected static function required( $field, $name )
	{
		$js = '(
				function(v){
					if(v==\'\'){
						return false;
					}
					else{
						return true;
					}
				})(value)';
		$message =  $name . 'は必須項目です';
		
		
		return array(
			'field' => $field,
			'rule' => $js,
			'message' => $message
		);
	}
	
	// ----------------------------------------------------
	
	/**
	 * 数字かチェック
	 * @param string $field
	 * @param string $name
	 * @return array
	 */
	protected static function numeric( $field, $name )
	{
		$js = '(function(v){
					if( v.match(/[^0-9]/)){
						return false;
					}
					else{
						return true;
					}
				})(value)';
		
		$message =  $name . 'は半角数字で入力してください';
		
		return array(
			'field' => $field,
			'rule' => $js,
			'message' => $message
		);
	}
	
	// ----------------------------------------------------
}

▲はい。超いい加減でしょw

protected static functionで、メソッドを追加すれば、
バリデーションのパターンは増やせます。
多分、JSとPHPが理解できる人なら、
バリデーションメソッドの内容は何をしているかわかるでしょう。
(説明もいい加減でごめんなさい)
 


 
で、この使いかたですが、
INTER-Mediatorの呼び出し定義をしているファイルから、
上記クラスをrequireするなりして、
 

$rules = array(
		array(
			'filed' => 'price',
			'name' => '価格',
			'rules' => array(
				'required',
				'numeric'
			)
		),
	);
$validation = im_validation::get_validation_def($rules);

 
とすると、$validationにINTER-Mediator用のバリデーション定義が返ります。
$rulesでは、
フィールド名、その名前、実行したいバリデーションメソッド名を配列で
それぞれ指定してやればOKです。
 

 
多分役に立つんじゃないかなーと。

4 Comments

  1. 伊藤清徳の垂直落下式ムーンサルトプレス » Blog Archive » INTER-Mediatorのバリデーションを構築するクラスをつくったった

  2. good product, excellent quality, beautiful! I am very happy! Thank you!Comfortably. Size and color correct. The seller’s communication satisfactory. Shirt better than in the pictures. Delivery in 41 days. And those who are actively engaged in running or cycling, that is inflated legs, these jeans should be taken with some reserve. Pockets
    [url=http://www.energiasmarinas.es/cas/brand/ralph-lauren-boxers.html]ralph lauren boxers[/url]

  3. memorial for just a two-week event. Several well-known professionals inside Italy will be to meticulously analysis the next out of your sale made cost will likely be dependant on these kind of authorities. The actual early examination, your Top benefit 500 million.
    http://www.surveyingformining.com/zozo.php?nike=products-c-55_58.html

  4. 私の車の使用のほとんどが10KM未満走行と渋滞でシビアコンディションです抜いたオイルは3000kで粘度が無く、ガソリン臭かったです。 また震災後、東日本全域の地下の応力のバランスが変わり、関東では全体的には地下のひずみが増す方向に働いたと推定されている過去を振り返ると首都圏ではマグニチュード(M)8級の大がくり返し起きている。 インクジェットプリンタ専用紙でクリアカットふちがすっきり仕上がるクリアカットタイプ。

コメントを残す

Your email address will not be published.

*