Web就活日記

愛と夢と人生について書きます

PHPのvalidate処理実装

validate処理

  • frameworkには必ずといっていいほど含まれているvalidate処理。独自に簡単な処理を書いてみた。
  • validateは処理の型が決まっているので、interfaceを用意し、個別のvalidateクラスを実装する。

interface

validateのinterfaceを定義

<?php
interface Validate {
    public function execute( $param, $format );
}

各validate処理

interfaceで定義したexecuteメソッドの本実装を行う。ここではStirng,Length,Regexを定義するが同様にクラスを追加すれば簡単にvalidateが実装できる。

<?php
class StringValidate implements Validate {
    public function execute( $param, $flag ) {
        if( is_string( $param ) !== $flag ) {
            return false;
        }
        return true;
    }

}

class LengthValidate implements Validate {
    public function execute( $param , $length ) {
        if( mb_strlen( $param ) > $length ) {
            return false;
        }
        return true;
    }
}

class RegexValidate implements Validate {
    public function execute( $param , $regex ) {
        if( !preg_match( $regex, $param ) ) {
            return false;
        }
        return true;
    }
}

validateManager

clientから呼び出され、各validateのexecuteメソッドを呼び出す。

<?php
class ValidateManager {

    static private $params_ = array();

    static public function init() {
        //本来はここで$_POSTなどから取得する
        self::$params_ = array( 'aaaa' => 'sampletest' );
    }

    static public function execute( $form ) {
        self::init();
        foreach( $form as $key => $valide ) {
            foreach( $valide as $type => $format ) {
                $class = ucfirst( $type ) . 'Validate';
                $value = self::$params_[ $key ];
                $result = $class::execute( $value, $format );
                if( $result === false ) {
                    echo "ERROR $type \n";
                    return false;
                }
            }
        }
        return true;
    }

}

clientプログラム

必要なvalidateの定義を行ない、validateManagerクラスに渡す。validateの定義を配列で行っているが設定ファイルから呼び出す方針に変更も可能。

<?php
//client
$form = array( 'aaaa' => array( 'String' => TRUE,
                                'Length' => 15,
                                'Regex' => '/\w.*/i' ) );

// 実行
$stat = ValidateManager::execute( $form );

if( $stat ) {
    echo "TRUE \n";
} else {
    echo "FALSE \n";
}

スポンサーリンク