TP中使用laravel那一套验证

---恢复内容开始---

1,tp5项目下新建一个extends目录,同时在入口文件index.php配置

define('EXTEND_PATH', '../extend/');

结果:

TP中使用laravel那一套验证

2,加载laravel里面涉及的illuminate包,更改composer。json文件 以后(如下),composer update

 {
"name": "topthink/think",
"description": "the new thinkphp framework",
"type": "project",
"keywords": [
"framework",
"thinkphp",
"ORM"
],
"homepage": "http://thinkphp.cn/",
"license": "Apache-2.0",
"authors": [
{
"name": "liu21st",
"email": "liu21st@gmail.com"
}
],
"repositories": {
"packagist": {
"type": "composer",
"url": "https://packagist.phpcomposer.com"
}
},
"require": {
"php": ">=5.4.0",
"topthink/framework": "^5.0",
"topthink/think-image": "^1.0",
"topthink/think-captcha": "^1.0",
"topthink/think-mongo": "^1.0",
"topthink/think-migration": "^1.0",
"topthink/think-angular": "^1.0",
"topthink/think-sae": "^1.0",
"topthink/think-worker": "^1.0",
"topthink/think-queue": "^1.0",
"topthink/think-testing": "^1.0",
"illuminate/validation": "^5.5",
"illuminate/translation": "5.5.*",
"illuminate/database": "^5.5",
"douyasi/identity-card": "~2.0"
},
"extra": {
"think-path": "thinkphp"
},
"config": {
"preferred-install": "dist"
}
}

3,在extend文件夹下面新建一个Validator.php

<?php
namespace validator;
//use exception\ValidatorException;
use Illuminate\Database\Capsule\Manager;
use Illuminate\Validation;
use Illuminate\Filesystem;
use Illuminate\Translation;
use Illuminate\Validation\DatabasePresenceVerifier;
use think\Exception;
use DB;
use Douyasi\IdentityCard\ID; class Validator
{
static $factory = null; /**
* @param $data
* @param $rules
* @return array
* @throws ValidatorException
*/
public static function make($data, $rules)
{
$is_default = [];
foreach($rules as $key=>$x)
{
$rules[$key] = preg_replace('/\|default\:[^\|]+/', '', $x, 1, $match);
if($match)
{
preg_match('/\|default:([^\|]+)/', $x, $m);
if(isset($m[1]))
{
$is_default[$key] = $m[1];
}
else
{
$is_default[$key] = null;
}
}
else
{
$is_default[$key] = null;
}
}
// var_dump($is_default);die;
if(self::$factory === null)
{
$filesystem = new Filesystem\Filesystem();
$fileLoader = new Translation\FileLoader($filesystem, THINK_PATH.'/../application/extra/');
$translator = new Translation\Translator($fileLoader, '/');
$factory = new Validation\Factory($translator); $database = [
'driver' => 'mysql',
'host' => env('DB_HOST', '192.168.40.8'),
'database' => env('DB_NAME', 'huolicai'),
'username' => env('DB_USER', 'root'),
'password' => env('DB_PASS', 'Abc@123456'),
'port' => env('DB_PORT', '3306'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
];
$connection = new Manager();
$connection->addConnection($database);
$connection->bootEloquent();
$connection->setAsGlobal();
$factory->setPresenceVerifier(new DatabasePresenceVerifier($connection->getDatabaseManager())); $factory->extend('list', function ($attribute, $value, $parameters, $validator) {
if(!is_array($value)) $value = explode(',', $value);
foreach($value as $item){
if($parameters[0] == 'integer' && !is_numeric($item))
throw new ValidatorException($attribute . ' 的每项必须为'.$parameters[0].'的类型', ValidatorException::BAD_VALIDATOR_PARAMS);
}
return true;
}); $factory->extend('csrf', function ($attribute, $value, $parameters, $validator) {
return $value == md5('SECRET.XXX'.\think\Request::instance()->ip());
}); $factory->extend('cellphone', function ($attribute, $value, $parameters, $validator) {
return preg_match('/^1(3|4|5|7|8|9)\d{9}$/', $value);
}); $factory->extend('idcard', function ($attribute, $value, $parameters, $validator) {
$ID = new ID();
return $ID->validateIDCard($value);
}); $factory->extend('length', function ($attribute, $value, $parameters, $validator) {
return strlen($value) == ($parameters[0]??0);
}); $factory->extend('length_between', function ($attribute, $value, $parameters, $validator) {
return (strlen($value) > $parameters[0]??0 )&&(strlen($value) < $parameters[1] ?? 0);
}); $factory->extend('bankcard', function ($attribute, $value, $parameters, $validator) {
try{
$card = \Bank::card($value);
}catch(\Exception $e){
# echo 'error_1';exit();
throw new ValidatorException('获取银行卡信息失败,请检查并重试', ValidatorException::BAD_VALIDATOR_PARAMS);
} if(!isset($card['validated']))
# echo 'error_2';exit();
throw new ValidatorException('获取银行卡信息失败,请检查并重试', ValidatorException::BAD_VALIDATOR_PARAMS);
/*
if(!$card['validated'])
throw new ValidatorException('银行卡无效', ValidatorException::BAD_VALIDATOR_PARAMS);
*/
if($card['cardType'] == 'CC')
throw new ValidatorException('不支持信用卡', ValidatorException::BAD_VALIDATOR_PARAMS); if(!isset(config('bank')[$card['bank']]))
throw new ValidatorException('不支持'.($card['bankName'] ?? $card['bank'] ?? '这张').'银行卡', ValidatorException::BAD_VALIDATOR_PARAMS); return true;
}); $factory->extend('float_digits', function ($attribute, $value, $parameters, $validator) {
$value = (float) $value;
$string = (string) $value;
$divided = explode('.', $string);
if(!count($parameters) == 2)
throw new ValidatorException(null, ValidatorException::BAD_VALIDATOR_PARAMS); if(!isset($divided[1]) && $parameters[0] == 0)
return true; if(isset($divided[1]) && strlen($divided[1]) <= $parameters[1] && strlen($divided[1]) >= $parameters[0])
return true; return false;
}); $factory->extend('exists_in', function ($attribute, $value, $parameters, $validator) {
if(($parameters[0] == true && trim($value)) || ($parameters[0] == false) ){
if(count($parameters) < 2) $parameters[1] = 'id'; $column = $parameters[1];
$exists = \think\Db::table($parameters[0])->where([$column => $value]);
if(isset($parameters[2]))
{
parse_str($parameters[2], $xx);
if($xx)
{
$exists = $exists->where($xx);
}
}
$attribute_name = config('validation.attributes')[$attribute] ?? $attribute; $exists = $exists->find();
if(!$exists)
throw new ValidatorException($attribute_name.' 不存在', ValidatorException::BAD_VALIDATOR_PARAMS);
}
return true;
}); $factory->extend('unique_in', function ($attribute, $value, $parameters, $validator) {
if(($parameters[0] == true && trim($value)) || ($parameters[0] == false) ){
if(count($parameters) < 2) $parameters[1] = 'id'; $column = $parameters[1];
$exists = \think\Db::table($parameters[0])->where([$column => $value]);
if(isset($parameters[2]))
{
parse_str($parameters[2], $xx);
if($xx)
{
$exists = $exists->where($xx);
}
}
$attribute_name = config('validation.attributes')[$attribute] ?? $attribute; $exists = $exists->find();
if($exists)
throw new ValidatorException($attribute_name.' 已存在', ValidatorException::BAD_VALIDATOR_PARAMS);
}
return true;
}); $factory->extend('exists_if', function ($attribute, $value, $parameters, $validator) {
if(($parameters[0] == true && trim($value)) || ($parameters[0] == false && !trim($value)) ){
if(count($parameters) < 3) $parameters[2] = 'id'; $column = $parameters[2];
$attribute_name = config('validation.attributes')[$attribute] ?? $attribute; $exists = \think\Db::table($parameters[1])->where([$column => $value])->find();
if(!$exists)
throw new ValidatorException($attribute_name.' 不存在', ValidatorException::BAD_VALIDATOR_PARAMS);
}
return true;
}); $factory->extend('default', function ($attribute, $value, $parameters, $validator) {
return true;
}); $factory->extend('unique_if', function ($attribute, $value, $parameters, $validator) {
if(($parameters[0] == true && trim($value)) || ($parameters[0] == false && !trim($value)) ){
if(count($parameters) < 3) $parameters[2] = 'id'; $column = $parameters[2];
$attribute_name = config('validation.attributes')[$attribute] ?? $attribute; $exists = \think\Db::table($parameters[1])->where([$column => $value])->find();
if($exists)
throw new ValidatorException($attribute_name.' 已存在', ValidatorException::BAD_VALIDATOR_PARAMS);
}
return true;
}); $factory->extend('null_if', function ($attribute, $value, $parameters, \Illuminate\Validation\Validator $validator) {
$cond = $validator->getData()[$parameters[0]];
$match = false;
for($i = 1; $i < count($parameters); $i++)
{
if($cond == $parameters[$i]){
$match = true;
break;
}
}
if($match)
{
if(!empty($value) && $value !== 0 && $value !== '0') return false;
}
return true;
}); self::$factory = $factory;
}else{
$factory = self::$factory;
} $messages = config('validation.custom');
$validator = $factory->make($data, $rules, $messages);
if($validator->fails())
{
throw new Exception(implode(',', $validator->errors()->all()), Exception::BAD_PARAMS);
} $return = [];
foreach($rules as $key=>$x)
{
$value = $data[$key] ?? $is_default[$key] ?? '';
if(($value === NULL || $value === "") && $is_default[$key] !== NULL)
{
$value = $is_default[$key];
}
if(null === $value || '' === $value)
{
}
if(preg_match('/list\:/', $rules[$key]))
{
if(is_null($value)) $value = '';
$value = explode(',', $value);
}
$return[] = $value;
} return $return;
}
}

5,在controller里面写一个方法

<?php

namespace app\index\controller;

use validator\Validator;

class Index
{
public function test1()
{
$handler = new Validator();
$a = $handler->make(['user'=>142, 'phone'=>1,'name'=>'kevin'],[
'user'=>'required|max:2',
'phone'=>'required',
'name'=>'required',
// 'id'=>'required|idcard'
],[
'phone.required' => 'phone不能为空',
'name.required' => '姓名不能为空'
]); echo "验证通过";

6,结果

TP中使用laravel那一套验证

 

7,如何新增验证方法 : 大(比如增加一个idcard验证身份证的方法)

  第一步:在validator.php修改

    TP中使用laravel那一套验证

    代码如下:

  
  $factory->extend('idcard', function ($attribute, $value, $parameters, $validator) {
$ID = new ID();
return $ID->validateIDCard($value);
});

    注意:为了能验证身份证,这里利用了第三方的包

      TP中使用laravel那一套验证

    结果演示:

    TP中使用laravel那一套验证

    

  

   

上一篇:【MyEclipse 2015】 逆向破解实录系列【2】(纯研究)


下一篇:安装JAVA环境