1. 程式人生 > >談表單驗證案例之ThinkPHP3.2使用ThinkPHP5.0+的Validate類

談表單驗證案例之ThinkPHP3.2使用ThinkPHP5.0+的Validate類

對錶單進行驗證是非常繁瑣,重複,但有不得不做的事情,自從用了laravel的驗證類後,瞬間覺得腦洞開啟,以前在javascript的有實現相關功能的函式,但沒完整整理出封裝出類的思路,下面由幾個案例入手,最後在整理下該類實現的思路,tp5.0中的validate類有借鑑laravel的意思,下面的例子為在tp3.2中載入使用tp5.0中的validate類:

下載ThinkPHP5.0+,找到

thinkphp\library\think\Validate.php

複製到

framework\ThinkPHP\Library\Think

並且重新命名:

Validate.php -> Validate.class.php

然後在框架 functions.php 檔案裡,新增大V方法。
functions.php 路徑:

framework\ThinkPHP\Common
/**
 * 例項化驗證類 格式:[模組名/]驗證器名
 * @param string $name         資源地址
 * @param string $layer        驗證層名稱
 * @param string $common       公共模組名
 * @return Object|false
 * @throws Exception
 *
 * @author chengbin
 */
function V($name
= '', $layer = 'Validate', $common = 'Common') { if (empty($name)) { return new Think\Validate; } static $_validate = array(); $guid = $name . $layer; if (isset($_validate[$guid])) { return $_validate[$guid]; } $class = parse_res_name( $name, $layer )
; if (class_exists($class)) { $validate = new $class; } else { if(!C('APP_USE_NAMESPACE')){ import('Common/'.$layer.'/'.$class); }else{ $class = '\\Common\\'.$layer.'\\'.$name.$layer; } if (class_exists($class)) { $validate = new $class; } else { throw new Exception('Validate Class Not Exists:' . $class); } } $_validate[$guid] = $validate; return $validate; }

呼叫例項:

$allInvestRecordValidate = V('AllInvestRecord');
if( !$allInvestRecordValidate->scene('ret')->check( $request ) ) {
    throw new \Exception( $allInvestRecordValidate->getError() );
}

AllInvestRecord路徑:

common\Common\Validate\AllInvestRecordValidate.class.php

AllInvestRecordValidate類:

<?php
namespace Common\Validate;

class AllInvestRecordValidate extends \Think\Validate
{

    protected $rule =   [
        'loan_id' => 'require',
    ];

    protected $message  =   [
        'loan_id.require' => '缺少引數 loan_id'
    ];

    protected $scene = [
        //流標場景
        'ret' => ['loan_id'],
    ];

}