Y's note

Web技術・プロダクトマネジメント・そして経営について

本ブログの更新を停止しており、今後は下記Noteに記載していきます。
https://note.com/yutakikuchi/

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";
}