談表單驗證案例之ThinkPHP3.2使用ThinkPHP5.0+的Validate類
阿新 • • 發佈:2019-02-11
對錶單進行驗證是非常繁瑣,重複,但有不得不做的事情,自從用了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'],
];
}